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

Use sed to delete everything after '>' and add index number plus a string?

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

>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 '/^>/ { [=10=] = ">seq" ++i " [organism=human]" } 1' file
>seq1 [organism=human]
AAAAATTTTTTTTCCCC
>seq2 [organism=human]
GGGGGGGGGGG

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

使用 sed:

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

(感谢 NeronLeVelu 的简化。)

使用 Perl 一行代码可能会更容易:

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