Bashを使用して書式設定されたテキストから値を抽出する

Bashを使用して書式設定されたテキストから値を抽出する

私は厳密な形式のテキストであり、DNAに関するいくつかの情報を含む.fastaファイルを持っています。一般的な構造は次のとおりです。

>NODE_18_length_75451_cov_83.3021
TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3_length_175235_cov_84.0427
ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG

偶数行にはDNA配列があり、奇数行にはその配列に関する情報があります。このシナリオは、単一のテキストファイルで少なくとも10,000行で繰り返されます。各行で "cov_"の後の値を取得し、2を掛けて新しいファイルに印刷する方法を見つける必要があります。新しいファイルには、次のスキームが必要です(すべての行について)。

>NODE_18 cov_166.60
DNA seq: TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3 cov_168.04
DNA seq: ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG  

答え1

これを行うために実際にシェルを使用したい場合は、算術演算を別のコマンドに渡すことができますbc。たとえば、次のようになります。

while read odd ; do
    echo -n "cov_" ; echo "2*${odd##*_}" | bc -q
    read even
    echo "DNA seq: $even"
done < input.fasta

答え2

バッシュを使用していますか?そこに行かないでください。テキスト処理言語ではありません。 awkを使用してください:

awk -F_ '/^>/ {printf "%s_%s cov_%.2f\n", $1, $2, $6 * 2; next} {print "DNA seq:", $0}' file.fasta 
>NODE_18 cov_166.60
DNA seq: TGAACCGCTTGCCAAATATTTTCCGTCCGGACTTACGGCAACGGAAAGGAC
>NODE_3 cov_168.09
DNA seq: ACATGCAATGTTTATAGTCCTTGTATCAGAGACTCTATCAACGCTCTCGG

関連情報