次のシナリオを使用して、多数の行(> 500 Mb)で構成されているファイルに対してこのスクリプトが機能するようにします。
odd lines: >BLA_BLA lenght_XX cov.XX
even lines: AGCAGCAGACTCAGACTACAGAT # on even lines there's a DNA sequence
その機能は、「cov」以降の値を再計算することです。引数として渡された引数を使用し、前の引数を置き換え、「G」と「C」がDNA配列に入る偶数行の割合を計算します。
したがって、出力は次のようになります。
> BLA_BLA lenght_XX
> nucleotidic_cov XX
> DNA seq (the same of even lines)
> GC_CONT: XX
コードは次のとおりです(ループのみ)。
K=$(($READLENGHT - $KMER + 1))
Y=$(echo "scale=4; $K / $READLENGHT" | bc)
while read odd; do
echo -n "${odd##}" | cut -d "_" -f 1,2,3,4 && printf "nucleotide_cov: "
echo "scale=4;${odd##*_} / $Y" | bc
read even
echo "${even##}" &&
ACOUNT=$(echo "${even##}" | sed -e "s/./&\n /g" | grep -c "A")
GCOUNT=$(echo "${even##}" | sed -e "s/./&\n /g" | grep -c "G")
CCOUNT=$(echo "${even##}" | sed -e "s/./&\n /g" | grep -c "C")
TCOUNT=$(echo "${even##}" | sed -e "s/./&\n /g" | grep -c "T")
TOTALBASES=$(($ACOUNT+$GCOUNT+$CCOUNT+$TCOUNT))
GCCONT=$(($GCOUNT+$CCOUNT))
printf "GC_CONT: "
echo "scale=2;$GCCONT / $TOTALBASES *100" | bc
done < "$1"
16コアサーバーで大容量テキストファイル(500 Mb以上)を実行すると、非常に遅くなります。このスクリプトの速度を向上させる方法についてのアイデアはありますか?
編集する
要求に応じて必要なI / OはPastebinを介して提供されます。https://pastebin.com/FY0Z7kUW
ベストアンサー1
シェルで合理的に実行できる操作の制限に達しました。 AWK、Perl、Pythonなどの言語でスクリプトを再構築する必要があります。これらの高度な言語を使用すると、すべてのテキスト処理に対して複数のプロセスを実行する必要がなくなり、そのために組み込み機能を使用できます。