2つの文字列の間の文字を検索し、行の末尾にいくつかのテキストを追加するには?

2つの文字列の間の文字を検索し、行の末尾にいくつかのテキストを追加するには?

私は次の行を含むfastaファイルで作業しています。

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

-との間のすべての文字を見つけて、;textとともに行の末尾に追加したいと思います;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  

私は見たこの問題2つの文字列の間の文字を見つける方法のヒントは、次のようにして取得できます。

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

しかし、私はその2つを組み合わせません。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

おすすめ記事