다음과 같은 파일이 있고 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
기록된 행을 선택하고 암시적으로 인쇄합니다.