我有一个制表符分隔的文件,如下所示:
input_sequence match_sequence score receptor_group epitope antigen organism
ASRPPGGVNEQF ASRPPGGVNEQF 1.00 25735 EPLPQGQLTAY surface glycoprotein [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
ASSYSGGYEQY ASSYSGGYEQY 1.00 33843 KTAYSHLSTSK polymerase Hepatitis B virus (hepatitis B virus (HBV))
ASSYSGGYEQY ASSYSGGYEQY 1.00 131430 KLSYGIATV orf1ab polyprotein [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
ASSYSGGYEQY ASSFSGGYEQY 0.97 82603 FTISVTTEIL surface glycoprotein [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
ASSYSGGYEQY ASSYAGGYEQY 0.98 133155 FVCNLLLLFVTVYSHLLLV ORF3a protein [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
ASSLFGSTDTQY ASSLFGSTDTQY 1.00 92508 FTISVTTEIL surface glycoprotein [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
我想保留仅与“organism”= SARS-CoV2 匹配的“input_sequence”,而不是其他任何内容。因此,在这个例子中,我将只保留第 2 行和第 7 行,并丢弃第 3、4、5、6 行,因为这里的“input_sequence”也受到乙型肝炎病毒的影响。
我的文件中总共有超过 20,000 行。
所需结果:
input_sequence match_sequence score receptor_group epitope antigen organism
ASRPPGGVNEQF ASRPPGGVNEQF 1.00 25735 EPLPQGQLTAY surface glycoprotein [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
ASSLFGSTDTQY ASSLFGSTDTQY 1.00 92508 FTISVTTEIL surface glycoprotein [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
有没有办法使用 awk 或 bash 快速完成此操作(无需编写长脚本)?欢迎任何提示。
我想使用 awk 来计算第 1 列中每个值的出现次数和第 7 列中 SARS-COV2 的出现次数,然后只保留那些匹配的......但我不知道该怎么做。我只得到了这么多(计算第一列中出现的次数):
awk '{for(i=1;i<=NF;i++)if($i ~ /^/)x++;print x;x=0}' file
Thanks!
您可以考虑使用这个 awk 将同一文件连接到第一列:
awk -F'\t' 'NR==FNR {$NF != "SARS-CoV2" && bad[$1]; next}
FNR == 1 || !($1 in bad)' file{,} | column -s $'\t' -t
input_sequence match_sequence score receptor_group epitope antigen organism
ASRPPGGVNEQF ASRPPGGVNEQF 1.00 25735 EPLPQGQLTAY Trans-activator protein BZLF1 [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
ASSLFGSTDTQY ASSLFGSTDTQY 1.00 92508 FTISVTTEIL surface glycoprotein [Severe acute respiratory syndrome coronavirus 2] SARS-CoV2
PS: column -s $'\t' -t
仅用于表格显示。您可以将其删除。
如果您想根据第一列删除会费,请使用:
awk -F'\t' 'NR==FNR {$NF != "SARS-CoV2" && bad[$1]; next}
FNR == 1 || (!($1 in bad) && !seen[$1]++)' file{,}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)