【发布时间】:2012-11-25 14:29:55
【问题描述】:
这里有一个简单的测试脚本:
while read LINE; do
LINECOUNT=$(($LINECOUNT+1))
if [[ $(($LINECOUNT % 1000)) -eq 0 ]]; then echo $LINECOUNT; fi
done
当我执行cat my450klinefile.txt | myscript 时,CPU 以 100% 的速度锁定,它每秒可以处理大约 1000 行。处理 cat my450klinefile.txt >/dev/null 在半秒内所做的事情大约需要 5 分钟。
有没有一种更有效的方法可以做到这一点。我只需要从标准输入读取一行,计算字节数,然后将其写入命名管道。但即使是这个例子的速度也慢得令人难以置信。
每输入 1Gb 的行,我需要执行一些更复杂的脚本操作(关闭和打开一些数据正在输入的管道)。
【问题讨论】:
-
除了 bash 脚本和编译工具之间的差异(参见 paxdiablo 的答案)之外,您的比较是不公平的:cat 只是在您的脚本进行一些计算时读取(行数)
-
用
((LINECOUNT++))替换LINECOUNT=$(($LINECOUNT+1)) -
也为了真正的比较你需要从你的脚本中删除条件,现在你的问题看起来像:
why my truck uses so much fuel when I trying to transport 20tonns of wood, when i run it without trailer it uses ten times less! -
您的示例计算的不是字节而是行
-
你为什么不使用
wc(字数)?wc -l数行。
标签: linux bash performance shell