ここに簡単なテストスクリプトがあります:
while read LINE; do
LINECOUNT=$(($LINECOUNT+1))
if [[ $(($LINECOUNT % 1000)) -eq 0 ]]; then echo $LINECOUNT; fi
done
私が行うとcat my450klinefile.txt | myscript
、CPUは100%でロックアップし、1秒間に約1000行を処理できます。0.5秒で何をするかを処理するのに約5分cat my450klinefile.txt >/dev/null
。
本質的にこれを行うためのより効率的な方法はありますか?stdinから行を読み取り、バイトをカウントして、名前付きパイプに書き出すだけです。しかし、この例でさえ速度は信じられないほど遅いです。
1Gbの入力行ごとに、いくつかのより複雑なスクリプトアクションを実行する必要があります(データがフィードされているいくつかのパイプを閉じたり開いたりします)。