4개의 열과 7,000개의 행이 있는 대용량 파일이 있습니다. 두 번째 열의 시작 부분이 네 번째 열의 시작 부분과 동일한 행을 삭제해야 합니다.
입력하다:
Gator_locus75 AATTCCATGTACG Gator_locus23 CTAGAGGAAGT
Gator_locus18 AATTCCATTATGG Gator_locus14 AATTCAAAAAAT
Gator_locus13 CTAGAACCCACC Gator_locus72 CTAGAATGTATG
Gator_locus16 AATTCATCCTCT Gator_locus15 CTAGATTGCCAA
Gator_locus24 CTAGAGCTGCTG Gator_locus12 AATTCAGTCCAC
산출:
Gator_locus75 AATTCCATGTACG Gator_locus23 CTAGAGGAAGT
Gator_locus16 AATTCATCCTCT Gator_locus15 CTAGATTGCCAA
Gator_locus24 CTAGAGCTGCTG Gator_locus12 AATTCAGTCCAC
두 번째 열의 문자열이 "AATT"로 시작하고 같은 행의 네 번째 열의 문자열이 "AATT"로 시작하는 행을 삭제해야 합니다. 두 번째 열의 문자열이 "CTAG"로 시작하고 네 번째 열의 문자열이 "CTAG"로 시작하는 경우에도 동일한 작업을 수행해야 합니다.
답변1
열 2의 처음 4자가 열 4의 처음 4자와 같지 않은 행을 인쇄하려면 다음을 수행하십시오.
awk 'substr($2, 1, 4) != substr($4, 1, 4)' < input
이는 기본 코드를 "테스트"로 사용하여 행을 인쇄해야 하는지 확인합니다. 기본 인쇄 작업이 우리가 원하는 것이기 때문에 명시적인 작업 부분이 없습니다. 기본 코드는 각 열에서 처음 4자를 추출하여 비교합니다.
답변2
두 번째 필드로 시작하는 행 삭제AATT
그리고네 번째 필드는 AATT
로 시작하며 다음과 같습니다 CATG
.
awk '($2 !~ /^AATT/ && $4 !~ /^AATT/) && ($2 !~ /^CTAG/ && $4 !~ /^CTAG/) {print}' /path/to/file
보다 일반적인 해결책은 다음과 같습니다.
awk 'substr($2,1,4) != substr($4,1,4) {print}' /path/to/file