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
很脆弱,不必要的过度杀伤力。但我想我可以让它比你的建议简单一点。。。