私は厳密な形式のテキストであり、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