使用您的代码,我看到了相同的时间增加模式(从一开始!)。如果您想要更快的处理,您应该使用 shell 内部功能重写。这是我的 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
输出 bash
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
(取决于您的基本操作系统)。
我希望这有帮助。