如何查找两个字符串之间的字符并将一些文本附加到行尾?

如何查找两个字符串之间的字符并将一些文本附加到行尾?

我正在处理包含以下行的 fasta 文件:

\>97977-100;sample=Samp1  
TAATGATGATTTGT  
\>97978-60;sample=Samp2  
AACATTCAACGCGGTCGGTGAGTA  
\>97979-30;sample=Samp3  
AACCGTAGGAGTTGATGTGCGGT  
\>97980-20;sample=Samp4  
ACTGTCTGTATGTGGTG  

我想找到-和之间的所有字符;并将它们与文本一起添加到行尾;size="(value)";,所以我会得到:

\>97977-100;sample=Samp1;size=100;  
TAATGATGATTTGT  
\>97978-60;sample=Samp2;size=60;  
AACATTCAACGCGGTCGGTGAGTA  
\>97979-30;sample=Samp3;size=30;  
AACCGTAGGAGTTGATGTGCGGT  
\>97980-20;sample=Samp4;size=20;  
ACTGTCTGTATGTGGTG  

我见过这个问题有关如何查找两个字符串之间的字符的一些帮助,我可以通过以下方式获得它们:

sed -n 1~2p $file | sed -e 's/.*-\(.*\);.*/\1/'

我知道如何附加到行尾:

sed "1~2s/$/;size=(I want this to be the output of the command above);/" $file

但我不会把两者放在一起。两者都不能sed使用命令,因为它会给出太大的参数错误。

答案1

sed解决方案:

sed -E 's/(.*-)([0-9]+)(;.*)/\1\2\3;size=\2;/' file

输出:

>97977-100;sample=Samp1;size=100;
TAATGATGATTTGT
>97978-60;sample=Samp2;size=60;
AACATTCAACGCGGTCGGTGAGTA
>97979-30;sample=Samp3;size=30;
AACCGTAGGAGTTGATGTGCGGT
>97980-20;sample=Samp4;size=20;

或者与awk:

awk -F'-' '/^>/{ $0=$0";size=" int($2) ";" }1' file

相关内容