Cからシェルスクリプトに移行したプログラムのパフォーマンスへの影響はどれほど悪いのだろうかと思っていました。
私は集中的なI/O操作を行っています。
たとえば、Cでは、ファイルシステムファイルから読み取り、別のファイルに書き込むループがあります。私は一貫した関係なしに各行の一部を取っています。私はこれをポインターを使ってやっています。本当にシンプルなプログラム。
シェルスクリプトでは、行を移動するために、を使用して${var:(char):(num_bytes)}
います。各行の処理が終了したら、それを別のファイルに連結します。
"$out" >> "$filename"
プログラムは次のようなことをします:
while read line; do
out="$out${line:10:16}.${line:45:2}"
out="$out${line:106:61}"
out="$out${line:189:3}"
out="$out${line:215:15}"
...
echo "$out" >> "outFileName"
done < "$fileName"
問題は、Cが400MBのファイルを処理するのに30分ほどかかり、シェルスクリプトが15分かかることです。
何か間違ったことをしているのか、シェルスクリプトで正しい演算子を使用していないのかわかりません。
編集:行を処理するパターンがないため、awkを使用できません
「echo$out」>>「$outFileName」にコメントしてみましたが、あまり良くなりません。問題は${line:106:61}操作だと思います。助言がありますか?
ご協力いただきありがとうございます。