パターンを検索し、すべての一致が見つかる前に2行を印刷する方法

パターンを検索し、すべての一致が見つかる前に2行を印刷する方法

さまざまなタンパク質項目に関する情報を含むファイルがあります。各項目には、配列の詳細(一番上の行)、配列内の文字が見つかった回数(2行目)、3行目のアミノ酸文字が含まれています。

以下の例:

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前の2行を別のファイルに印刷するにはどのコマンドを使用する必要がありますか?これらの出力ファイルは次のようにする必要があります。

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

(あなたの例のように、あなたの記録は空行で区切られていると仮定します)

関連情報