Unix 使用sed删除'&燃气轮机';加上索引号和字符串?

Unix 使用sed删除'&燃气轮机';加上索引号和字符串?,unix,sed,bioinformatics,fasta,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] GGGGG

我知道这应该很简单,但我不能让它工作。我的文件看起来像这样

>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'

但是如何建立索引呢?

这里有一种方法可以使用awk实现:

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

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

以下是使用awk执行此操作的一种方法:

$ awk '/^>/ { $0 = ">seq" ++i " [organism=human]" } 1' file
>seq1 [organism=human]
AAAAATTTTTTTTCCCC
>seq2 [organism=human]
GGGGGGGGGGG
当该行以
开头时,将其替换为
seq
,然后是
i
(每次增加1),然后是
[生物体=人类]
。命令末尾的
1
为true,因此awk执行默认操作,即打印行。

使用sed:

sed '/^>/d' filename | sed '=' | sed 's/^[0-9]*$/>seq& [organism=human]/'
(感谢NeronLeVelu的简化。)

使用sed:

sed '/^>/d' filename | sed '=' | sed 's/^[0-9]*$/>seq& [organism=human]/'

(感谢NeronLeVelu的简化。)

使用Perl one liner可能更容易:

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

使用Perl一行程序可能更容易:

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

最后一个sed的命题可以是
sed的/^[0-9]\{1,\}$/>seq&[organic=human]/'
假设第二行始终包含letter@NeronLeVelu:你说得对,我的
N
很脆弱,不必要的过度杀伤力。但我想我实际上可以让它比你的提议简单一点……最后一个sed的提议可以是
sed的/^[0-9]\{1,\}$/>seq&[organic=human]/'
假设第二行总是包含letter@NeronLeVelu:你说得对,我的
N
很脆弱,不必要的过度杀伤力。但我想我可以让它比你的建议简单一点。。。