使用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]
。命令末尾的 1
是 true,因此 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
我知道这应该很简单,但我无法让它工作。我的文件看起来像这样
>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]
。命令末尾的 1
是 true,因此 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