あなたのコードを使用して、同じパターンの増加する時間を見ました (最初から!)。より高速な処理が必要な場合は、シェルの内部機能を使用して書き直す必要があります。これが私のbashバージョンです:
tabChar=" " # put a real tab char here, of course
seq 1000000 > seq.dat
while read s;
do
if (( ! ( s % 50000 ) )) ;then
echo $s "${tabChar}" $( expr `date +%s` - $A)
A=$(date +%s);
fi
done < seq.dat
修正されたバグを編集
し、各行が処理されていることを出力が示していましたが、50000 行ごとにタイミング処理が行われるようになりました。ドアー!
だった
if (( s % 50000 )) ;then
に固定
if (( ! ( s % 50000 ) )) ;then
今すぐ出力echo ${.sh.version} =
バージョン JM 93t+ 2010-05-24
50000
100000 1
150000 0
200000 1
250000 0
300000 1
350000 0
400000 1
450000 0
500000 1
550000 0
600000 1
650000 0
700000 1
750000 0
出力バッシュ
50000 480
100000 3
150000 2
200000 3
250000 3
300000 2
350000 3
400000 3
450000 2
500000 2
550000 3
600000 2
650000 2
700000 3
750000 3
800000 2
850000 2
900000 3
950000 2
800000 1
850000 0
900000 1
950000 0
1e+06 1
元のテストケースに時間がかかる理由については...よくわかりません。各テスト サイクルの時間と時間の増加の両方を見て驚きました。これを本当に理解する必要がある場合は、より多くのテストを計測するために時間を費やす必要があるかもしれません。たぶん、何かが実行されているtruss
か、またはstrace
(ベースOSに応じて)表示されるでしょう。
これが役立つことを願っています。