我想将一个文件的内容搜索到另一个文件中,并打印匹配的行以及第二个文件中匹配行之后的行。第一个文件的内容可以在第二个文件的>
列下以GN
开头的行中找到。我要写匹配的行(从>
开始),然后再写具有氨基酸序列的行(以“ M” 开头的大写字母)>
文件1:
thrB
yaaX
thrC
dnaK
dnaJ
文件2:
>sp|B1XBC8|KHSE_ECODH Homoserine kinase OS=Escherichia coli (strain K12 / DH10B) OX=316385 GN=thrB PE=3 SV=1
MVKVYAPASSANMSVGFDVLGAAVTPVDGALLGDVVTVEAAETFSLNNLGRFADKLPSEP
>sp|P0AD61|KPYK1_ECOLI Pyruvate kinase I OS=Escherichia coli (strain K12) OX=83333 GN=pykF PE=1 SV=1
MKKTKIVCTIGPKTESEEMLAKMLDAGMNVMRLNFSHGDYAEHGQRIQNLRNVMSKTGKT
>sp|P75616|YAAX_ECOLI Uncharacterized protein YaaX OS=Escherichia coli (strain K12) OX=83333 GN=yaaX PE=3 SV=1
MKKMQSIVLALSLVLVAPMAAQAAEITLVPSVKLQIGDRDNRGYYWDGGHWRDHGWWKQH
我希望输出为:
>sp|B1XBC8|KHSE_ECODH Homoserine kinase OS=Escherichia coli (strain K12 / DH10B) OX=316385 GN=thrB PE=3 SV=1
MVKVYAPASSANMSVGFDVLGAAVTPVDGALLGDVVTVEAAETFSLNNLGRFADKLPSEP
>sp|P75616|YAAX_ECOLI Uncharacterized protein YaaX OS=Escherichia coli (strain K12) OX=83333 GN=yaaX PE=3 SV=1
MKKMQSIVLALSLVLVAPMAAQAAEITLVPSVKLQIGDRDNRGYYWDGGHWRDHGWWKQH
到目前为止,我已经尝试过
grep -F -f file1 file2
仅打印找到匹配项的行
awk我只写过
awk 'NR==FNR{a[$1]++;next}{} file1 file2
我可以打印匹配的行,但此后我不知道如何打印(以“ M”开头)。
有人可以帮助我解决这个问题吗?
非常感谢您的帮助。
另外,如果我的第二个文件在文件1中具有多个字符串匹配项,并且我想打印所有出现的情况怎么办?
预先感谢
答案 0 :(得分:1)
如果您有GNU grep
grep --no-group-separator -A1 -Ff file1 file2
-A1
将告诉grep打印匹配行以及下一行--
分隔,因此如果您希望避免使用此行,请使用--no-group-separator
答案 1 :(得分:0)
请您尝试以下。
awk '
FNR==NR{
a[$0]
next
}
match($0,/GN=[^ ]*/){
str=substr($0,RSTART+3,RLENGTH-3)
}
(str in a) && /^>/{
found=1
val=$0
next
}
found && /^M/{
print val ORS $0
}
{
val=found=""
}
' Input_file1 Input_file2