두 열의 처음 4자 사이에 중복된 문자열이 포함된 행 삭제

두 열의 처음 4자 사이에 중복된 문자열이 포함된 행 삭제

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

관련 정보