패턴을 검색하고 모든 일치 항목이 발견되기 전에 두 줄을 인쇄하는 방법

패턴을 검색하고 모든 일치 항목이 발견되기 전에 두 줄을 인쇄하는 방법

다양한 단백질 항목에 대한 정보가 포함된 파일이 있습니다. 각 항목에는 서열 세부사항(맨 위 행), 서열에서 문자가 발견된 횟수(두 번째 행), 세 번째 행의 아미노산 문자가 포함됩니다.

아래에 주어진 예:

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

(귀하의 예와 같이 귀하의 기록이 빈 줄로 구분되어 있다고 가정합니다)

관련 정보