私は次の行を含む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