将文本附加到 fasta 中的特定模式 BASH

Appending text to specific patterns in a fasta BASH

我有一个像这样的 header 斋戒:

tr|Q7MX99|Q7MX99_PORGI_BACT

我希望他们说:

tr|Q7MX99|Q7MX99_PORGI_BACT_ORALMICROBIOME

所以基本上,每当我有 PORGI_BACT 时,我想将 _ORALMICROBIOME 附加到每个实例。

我确定可以通过终端轻松修复,但我似乎找不到。

我的第一个想法是做这样的事情:

sed 's/>.*/&_ORALMICROBIOME/' file.fa > outfile.fa

但我只想添加特定的 header 结尾,这就是我被困的地方。

使用 sed:

sed -r 's/(^.*)(PORGI_BACT|HUMAN_MAM|TESTA_BACT)(.*$)/_ORALMICROBIOME/' file.fa > outfile.fa

使用 -r 或 -E 启用正则表达式解释,然后根据“PORGI_BACT”在第二部分中将该行分成三部分,然后用该行替换第一部分和第二部分,然后是"_ORALMICROBIOME" 最后是第三部分。

你快接近了。请您尝试以下操作:

sed 's/^>.*PORGI_BACT/&_ORALMICROBIOME/' file.fa > outfile.fa

[编辑]
根据OP的要求,如何:

sed -E 's/^>.*(PORGI_BACT|HUMAN_MAM|TESTA_BACT)/&_ORALMICROBIOME/' file.fa > outfile.fa

示例输入为 file.fa:

>SEQ0|tr|Q7MX99|Q7MX99_PORGI_BACT
FQTWEEFSRAAEKLYLADPMKVRVVLKYRHVDGNLCIKVTDDLVCLVYRTDQAQDVKKIEKF
>SEQ1|tr|Q7MX88|Q7MX88_HUMAN_MAM
KYRTWEEFTRAAEKLYQADPMKVRVVLKYRHCDGNLCIKVTDDVVCLLYRTDQAQDVKKIEKFHSQLMRLME
LKVTDNKECLKFKTDQAQEAKKMEKLNNIFFTLM
>SEQ2|tr|Q7MX77|Q7MX77_TESTA_BACT
EEYQTWEEFARAAEKLYLTDPMKVRVVLKYRHCDGNLCMKVTDDAVCLQYKTDQAQDVKKVEKLHGK
>SEQ3|tr|Q7MX66|Q7MX66_DUMMY
MYQVWEEFSRAVEKLYLTDPMKVRVVLKYRHCDGNLCIKVTDNSVCLQYKTDQAQDVK

输出:

>SEQ0|tr|Q7MX99|Q7MX99_PORGI_BACT_ORALMICROBIOME
FQTWEEFSRAAEKLYLADPMKVRVVLKYRHVDGNLCIKVTDDLVCLVYRTDQAQDVKKIEKF
>SEQ1|tr|Q7MX88|Q7MX88_HUMAN_MAM_ORALMICROBIOME
KYRTWEEFTRAAEKLYQADPMKVRVVLKYRHCDGNLCIKVTDDVVCLLYRTDQAQDVKKIEKFHSQLMRLME
LKVTDNKECLKFKTDQAQEAKKMEKLNNIFFTLM
>SEQ2|tr|Q7MX77|Q7MX77_TESTA_BACT_ORALMICROBIOME
EEYQTWEEFARAAEKLYLTDPMKVRVVLKYRHCDGNLCMKVTDDAVCLQYKTDQAQDVKKVEKLHGK
>SEQ3|tr|Q7MX66|Q7MX66_DUMMY
MYQVWEEFSRAVEKLYLTDPMKVRVVLKYRHCDGNLCIKVTDNSVCLQYKTDQAQDVK