使用sed删除'>'后面的所有内容并添加索引号加一个字符串?

时间:2015-08-27 19:24:10

标签: unix sed bioinformatics fasta

我知道这应该很简单,但我无法让它发挥作用。我的文件看起来像这样

>c12345|random info goes here that I want to delete
AAAAATTTTTTTTCCCC
>c45678| more | random info|  here
GGGGGGGGGGG

我想要做的就是让它变得更简单,所以它可能看起来像这样

>seq1 [organism=human]
AAAAATTTTTTTTCCCC
>seq2 [organism=human]
GGGGGGGGGGGG
>seq3 [organism=human]
etc....

我知道一旦我通过执行以下操作获得索引部分,我就可以轻松追加该常量:

sed '/^>/ s/$/\[organism-human]/g'

但是如何构建该索引呢?

2 个答案:

答案 0 :(得分:4)

这是使用awk的一种方法:

$ awk '/^>/ { $0 = ">seq" ++i " [organism=human]" } 1' file
>seq1 [organism=human]
AAAAATTTTTTTTCCCC
>seq2 [organism=human]
GGGGGGGGGGG

当该行以>开头时,请将其替换为seq后跟i(每次增加1),然后[organism=human]。命令末尾的1 true ,因此awk执行默认操作,即打印该行。

答案 1 :(得分:1)

使用Perl one-liner可能会更容易:

perl -ne 'chomp; if (/^>/) { s/\|.*$//; print "$_ \[organism=human\]\n";} else { print "$_\n";}' filename