2011-10-19 34 views
3

我有大量条目的FASTA文件。虽然所有的DNA序列都不同,但一些FASTA名称是相同的。如果有多个名称的副本,我想附加一个数字,以使它们成为唯一的名称。例如:遍历FASTA条目,并重新命名重复

>NAME 
ATTTTTGGGGGGTGTGTG 
>NAME 
ATTTTTTTTCGCGCGC 
>NAME 
AAACCCTTTGTG 

将成为:

>NAME_1 
ATTTTTGGGGGGTGTGTG 
>NAME_2 
ATTTTTTTTCGCGCGC 
>NAME_3 
AAACCCTTTGTG 

感谢。

更新。因为我打算在R中使用它,所以我将fasta序列导入到R中,并将其作为数据帧df。那么我可以重命名,然后通过使用下面的行根据需要:

library(plyr) 
ddply(df, Name_Column, transform, Column = paste(Name_Column,seq_along(Name_Column), sep="")) 

码本post

回答

4

Biostrings包的Bioconductor具有

library(Biostrings) 
fa = read.DNAStringSet(...) 

然后

names(fa) = make.unique(names(fa)) 
write.XStringSet(fa, ...) 

或其他有用的操作。

+0

谢谢马丁。我用Biostrings导入我的FASTA,但没有意识到他们有make.unique()函数。这非常有用。正如你所看到的,我使用了一种数据框方法,但是我必须从Biostring容器中获取一个数据帧,然后再执行一些额外的步骤。谢谢 – zach

+0

@zach'make.unique'实际上是在R中;我们只是在这里使用它。 –

5

您可以使用下面的AWK命令的启发:

$ echo -e ">A\nNNNN\n>A\nNNNNNNN" |\ 
awk '/^>/ { printf("%s_%s\n",$0,i++);next;} { print $0;}' 

>A_0 
NNNN 
>A_1 
NNNNNNN 

参见映泰:http://biostar.stackexchange.com

+0

+1 - 如果我理解正确的这个,它足以让每一个序列名称独特 - 通过附加一个唯一索引*所有*序列名称,它们是否重复与否。添加索引*仅*重复是可行的,但稍微复杂一点。 –

+0

谢谢皮埃尔。 awk脚本确实会为每个FASTA记录添加一个唯一的ID。理想情况下,如@ andythomas-cramer所示,脚本只会将其添加到重复项中,并且会为每个重复项对重置计数。 – zach

+0

@zach,是在文件中彼此相邻的副本,还是展开?另外,除了描述行之外,是否已知每个序列只在一行中列出? –