如何使用sed重命名fasta文件头

如何使用sed重命名fasta文件头,sed,fasta,Sed,Fasta,我知道这很容易,但我不能让它工作。我试图使用sed和evnet重命名头,尽管reg expersion可以工作,但我无法重命名fasta头。这里有一个小例子。我有一个多序列fasta文件,如下所示 >Bra000001 CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT >Bra000002 TTTATGTAGTACTGGACTAAT

我知道这很容易,但我不能让它工作。我试图使用sed和evnet重命名头,尽管reg expersion可以工作,但我无法重命名fasta头。这里有一个小例子。我有一个多序列fasta文件,如下所示

>Bra000001
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT
现在我只想在fasta标题的末尾加上“Brassica rapa”,就像这样

>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT
我这样做是为了让它工作

grep ">" in.fa | sed 's/$/ Brassica rapa/' > out.fa
但是,通过这样做,我只能更改标题,但这里没有序列信息。理想情况下,我希望更改标题并保持序列不变。

您只能使用其替换命令,检查行是否以
字符开头,将整行分组并在末尾附加字符串,如:

sed 's/^\(>.*\)$/\1 Brassica rapa/' infile
它产生:

>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT
您只能与它的替换命令一起使用,检查行是否以
字符开头,将整行分组并在末尾附加字符串,如:

sed 's/^\(>.*\)$/\1 Brassica rapa/' infile
它产生:

>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT

awk
做得既好又简单

awk '/^>/ {$0=$0 " Brassica rapa"}1' in.fa >out.fa
>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT

awk
做得既好又简单

awk '/^>/ {$0=$0 " Brassica rapa"}1' in.fa >out.fa
>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT


这可能更简单一些:
sed'/^>/s/$/Brassica rapa/'
——对于以
开头的行,请将行尾更改为给定的字符串。或者,像您没有捕获括号的情况一样:
sed's/^>*/&Brassica rapa'
--其中
&
被替换为匹配的文本。感谢他们所有人的努力。不过我有个问题。“sed”分组与“R”分组的效果相同吗?@glennjackman:好的选择。可能他们两个都比我快。@upendra:我不知道
R
。我没办法。抱歉。这可能更简单一些:
sed'/^>/s/$/Brassica rapa/'
——对于以
开头的行,请将行的结尾更改为给定的字符串。或者,像您没有捕获括号的情况一样:
sed's/^>*/&Brassica rapa'
--其中
&
被替换为匹配的文本。感谢他们所有人的努力。不过我有个问题。“sed”分组与“R”分组的效果相同吗?@glennjackman:好的选择。可能他们两个都比我快。@upendra:我不知道
R
。我没办法。抱歉,抱歉重复回复,在发布mineJotne时还没有阅读glenn jackman对Birei回复的评论抱歉重复回复,在发布mineJotne时还没有阅读glenn jackman对Birei回复的评论,你能告诉我“1”是什么数字吗?我试图删除它,但它不起作用,当我将它更改为其他数字,如“2”和“3”(只是为了确保它是用于分组的,类似于上面的awk),它起到了意想不到的作用。@upendra这是
awk
中最常用的命令。当你有一个从
1
到更高的数字时,这将是一个真实的测试,并执行默认操作
print
,因此
1
=
1{print}
=
1{print$0}
Jotne,你能告诉我“1”是什么数字吗?我试图删除它,但它不起作用,当我将它更改为其他数字,如“2”和“3”(只是为了确保它是用于分组的,类似于上面的awk),它起到了意想不到的作用。@upendra这是
awk
中最常用的命令。当您有一个从
1
到更高的数字时,它将是一个真实的测试,并执行默认操作
print
,因此
1
=
1{print}
=
1{print$0}