如何将字符串添加到 fasta 标识符

How to add strings to fasta identifiers

我有一个包含多个序列的 fasta 文件:

grep -e ">" seq.fasta
>mmu_miR_8109 
>mmu_miR_8110 
>mmu_miR_8111 
>mmu_miR_8112 
>mmu_miR_8113 
>mmu_miR_8114 
>LQNS02136402.1_14821_5p 
>LQNS02278094.1_35771_5p 
>Dpu-Mir-22-P2_LQNS02276481.1_18963_3p 

我想在序列标识符中添加另一部分,使其看起来像这样:

grep -e ">" results.fasta"
>mmu_miR_8109 MOUSE Mus musculus miR_8109
>mmu_miR_8110 MOUSE Mus musculus miR_8110
>mmu_miR_8111 MOUSE Mus musculus miR_8111
>mmu_miR_8112 MOUSE Mus musculus miR_8112
>mmu_miR_8113 MOUSE Mus musculus miR_8113
>mmu_miR_8114 MOUSE Mus musculus miR_8114
>LQNS02136402.1_14821_5p MOUSE Mus musculus 14821_5p
>LQNS02278094.1_35771_5p MOUSE Mus musculus 35771_5p
>Dpu-Mir-22-P2_LQNS02276481.1_18963_3p  MOUSE Mus musculus 18963_3p

请注意,MOUSE Mus musculus 始终相同,每个标识符的最后部分等于第 1 列的最后部分“_to_keep”

到目前为止我已经做到了:

 grep -e ">" seq.fasta | sed 's/>.*/& MOUSE/' | sed 's/>.*/& Mus musculus/' 

但是我遗漏了最后一部分(保留最后的值)以及如何应用它来对 fasta 文件进行更改。 希望有人能帮忙。谢谢!!

这里有一个简单的awk方法,把FS设置为下划线似乎很方便。当一行是 header 时,我们通过添加固定字符串和现有字符串的最后两部分来修改它,并打印所有带有 1.

的行
awk -F_ '/>/{[=10=] = [=10=] " MOUSE Mus musculus " $(NF-1) FS $NF} 1' file

输出:

>mmu_miR_8109 MOUSE Mus musculus miR_8109 
>mmu_miR_8110 MOUSE Mus musculus miR_8110 
>mmu_miR_8111 MOUSE Mus musculus miR_8111 
>mmu_miR_8112 MOUSE Mus musculus miR_8112 
>mmu_miR_8113 MOUSE Mus musculus miR_8113 
>mmu_miR_8114 MOUSE Mus musculus miR_8114 
>LQNS02136402.1_14821_5p MOUSE Mus musculus 14821_5p 
>LQNS02278094.1_35771_5p MOUSE Mus musculus 35771_5p 
>Dpu-Mir-22-P2_LQNS02276481.1_18963_3p MOUSE Mus musculus 18963_3p 

确认输出良好后,您可以修改现有文件,如下所示:

awk -F_ '/>/{[=12=] = [=12=] " MOUSE Mus musculus " $(NF-1) FS $NF} 1' file > file.tmp && mv file.tmp file

在继续之前始终备份您的数据。

这可能适合您 (GNU sed):

sed -Ei 's/(.*_(.*_\S*)).*/ MOUSE Mus musculus /' file