我有这样的文件,我使用 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
选择并隐式打印记录的行。