我有一个文本文件,其格式如下:
>keyword1 keyword2 keyword3
somedata
somedata
somedata
>keyword4 keyword5 keyword6
somedata
somedata
>keyword7 keyword8
somedata
somedata
somedata
somedata
....
即,始终以">"开头的注释行然后是可变数量的数据行。
我想在开始的行中找一些东西">"并返回后面的所有数据行。如果之后总是有4行数据,我可以grep -A 4 '^>' keyword
,但我不知道如何解释变化。
举个例子,如果文件是这样的:
>tomato lettuce cucumber
123
456
>apple banana
111
222
333
>tomato
444
5757
558585
我希望能够用"番茄"做一些类似grep的事情。并回来:
>tomato lettuce cucumber
123
456
>tomato
444
5757
558585
答案 0 :(得分:1)
kent$ awk '/^>/{t=/tomato/?7:0}t' file
>tomato lettuce cucumber
123
456
>tomato
444
5757
558585
答案 1 :(得分:0)
使用awk的另一种方式:
awk -v RS='>' '/tomato/ {printf(">%s",$0)}' file
>tomato lettuce cucumber
123
456
>tomato
444
5757
558585
这会将记录分隔符RS
从默认换行符更改为">"。如果记录中包含您感兴趣的单词,请将其打印出来。
如果您正在处理FASTA数据,您还有其他选择,例如BioPerl中的Bio::SeqIO
模块。