조건이 충족되면 행과 다음 행을 삭제합니다.

조건이 충족되면 행과 다음 행을 삭제합니다.

다음과 같은 파일이 있고 bash를 사용합니다.

&ACLB032-06|Bos taurus|COI-5P|HM102290
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCTATTCTATATCAACACTTATTC--------
&CYTC426-12|Bos taurus|atp6
ATGAACGAAAATTTATTTACCTCTTTTACCAATTCTAGAGTTTGCAGTAGCTATAATCCAAGCCTATGTATTCACTCTCCTAGTCAGCCTATATCTGCATGACAACACA
&CYTC426-12|Bos taurus|D-loop
AACACTATTAATATAGTTCCATAAATACAAAGCGCTTTCAATACTCAATTTAGCACTCCAAACAAAGTCAATATATAAACGCAGGCCCCCCCCCCC
&CYTC426-12|Bos taurus|COII
ATGGCATATCCCATACAACTAGGATTCCAAGCGGGTCAAACCACAGTTTCATACCCATTGTCCTTGAGTTAGTCCCACTAAAGTACTTTGAAAAATGATCTGCGTCAA
&CYTC426-12|Bos taurus|COI-5P|HQ184039
CATAAAGATATTGGTACCCTTTATCTAAAAAGTCTTCAGCTGATTAGCAACACTTCATGGAGGT
&CYTC426-12|Bos taurus|CYTB
ATGACTAACATTCGAAAGTCCCACCCACTACCTAGTGCTAATACCAACGGCCGGCACAGTCGAAAACAAATTACTAAAATGA

파일에는 백만 줄이 포함될 수 있습니다. "COI-5P" 문자열과 그 후속 줄이 포함된 줄만 유지하고 싶습니다. 결과는 다음과 같습니다.

&ACLB032-06|Bos taurus|COI-5P|HM102290
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCTATTCTATATCAACACTTATTC--------
&CYTC426-12|Bos taurus|COI-5P|HQ184039
CATAAAGATATTGGTACCCTTTATCTAAAAAGTCTTCAGCTGATTAGCAACACTTCATGGAGGT

하지만 해결책을 찾는 데 어려움을 겪고 있습니다. 도와주세요?

답변1

시도해 볼 수 있습니다(GNU grep을 가정):

grep -A1 --no-group-separator 'COI-5P' file

매뉴얼 grep페이지에는 다음과 같이 나와 있습니다.

컨텍스트 라인 제어

-A 일련번호,--after-context=일련번호

인쇄일련번호일치하는 줄 뒤의 후행 컨텍스트 줄입니다. --연속적으로 일치하는 그룹 사이에 그룹 구분 기호( )가 포함된 줄을 배치합니다. -o또는 옵션을 사용하면 --only-matching효과가 없으며 경고가 표시됩니다.

--no-group-separator

그룹 구분 기호로 빈 문자열을 사용합니다.

시험:

$ cat file
&ACLB032-06|Bos taurus|COI-5P|HM102290
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCTATTCTATATCAACACTTATTC--------
&CYTC426-12|Bos taurus|atp6
ATGAACGAAAATTTATTTACCTCTTTTACCAATTCTAGAGTTTGCAGTAGCTATAATCCAAGCCTATGTATTCACTCTCCTAGTCAGCCTATATCTGCATGACAACACA
&CYTC426-12|Bos taurus|D-loop
AACACTATTAATATAGTTCCATAAATACAAAGCGCTTTCAATACTCAATTTAGCACTCCAAACAAAGTCAATATATAAACGCAGGCCCCCCCCCCC
&CYTC426-12|Bos taurus|COII
ATGGCATATCCCATACAACTAGGATTCCAAGCGGGTCAAACCACAGTTTCATACCCATTGTCCTTGAGTTAGTCCCACTAAAGTACTTTGAAAAATGATCTGCGTCAA
&CYTC426-12|Bos taurus|COI-5P|HQ184039
CATAAAGATATTGGTACCCTTTATCTAAAAAGTCTTCAGCTGATTAGCAACACTTCATGGAGGT
&CYTC426-12|Bos taurus|CYTB
ATGACTAACATTCGAAAGTCCCACCCACTACCTAGTGCTAATACCAACGGCCGGCACAGTCGAAAACAAATTACTAAAATGA

$ grep -A1 --no-group-separator 'COI-5P' file
&ACLB032-06|Bos taurus|COI-5P|HM102290
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCTATTCTATATCAACACTTATTC-----------
&CYTC426-12|Bos taurus|COI-5P|HQ184039
CATAAAGATATTGGTACCCTTTATCTAAAAAGTCTTCAGCTGATTAGCAACACTTCATGGAGGT

답변2

이 코드를 사용하여 해결책을 찾았습니다.

awk '/COI-5P/{nr[NR]; nr[NR+1]}; NR in nr' oldfile > newfile

어디

  • /COI-5P/{nr[NR]; nr[NR+1]}일치하는 줄과 후속 줄을 기록합니다.
  • NR in nr기록된 행을 선택하고 암시적으로 인쇄합니다.

관련 정보