如何搜索模式并在找到的所有匹配项之前打印两行

如何搜索模式并在找到的所有匹配项之前打印两行

我有一个文件,其中包含有关不同蛋白质条目的信息。每个条目包括:序列的详细信息(顶行)、序列中找到任何字母的次数(第二行)以及第三行中的氨基酸字母。

下面给出的示例:

sp|Q5N386|PETN_SYNP6 Cytochrome b6-f complex subunit 8 OS=Synechococcus sp. (strain ATCC 27144 / PCC 6301 / SAUG 1402/1) OX=269084 GN=petN PE=3 SV=1
A=4 D=1 E=1 F=4 G=5 I=1 L=5 M=2 N=1 R=1 S=2 T=2 V=3 W=2
Amino acid alphabet = 14

sp|Q20EX4|PETG_OLTVI Cytochrome b6-f complex subunit 5 OS=Oltmannsiellopsis viridis OX=51324 GN=petG PE=3 SV=1
A=2 D=1 E=1 F=1 G=4 I=1 L=7 M=1 P=2 Q=1 R=2 S=1 T=2 V=6 Y=2
Amino acid alphabet = 15

sp|P81612|MYTA_MYTED Mytilin-A OS=Mytilus edulis OX=6550 PE=1 SV=1
A=5 C=8 F=2 G=4 K=4 R=6 S=3 W=1 Y=1
Amino acid alphabet = 9

我应该使用什么命令,以便当我想查找所有具有 的条目时Amino acid alphabet = 9,它还应该将前面的两行打印到不同的文件中?这样的输出文件应如下所示:

sp|P81612|MYTA_MYTED Mytilin-A OS=Mytilus edulis OX=6550 PE=1 SV=1
A=5 C=8 F=2 G=4 K=4 R=6 S=3 W=1 Y=1
Amino acid alphabet = 9

答案1

GNU为此grep提供了-B( ) 选项:--before-context

grep -F -B2 -x 'Amino acid alphabet = 9' file

如果您grep没有此选项,您可以使用awk

awk -v RS= '/Amino acid alphabet = 9$/' file

(我假设您的记录由空行分隔,如您的示例所示)

相关内容