我有大日志文件(1-2 GB或更多)。我是编程和bash的新手,对我来说非常有用和轻松。当我需要什么时,我可以做(有人在这里帮助我)。简单的脚本工作正常,但是当我需要复杂的操作时,也许bash这么慢也许我的编程技巧如此糟糕,工作速度太慢。
所以我需要C来进行服务器日志文件的复杂编程,还是只需要优化我的脚本?
如果我只需要优化,我如何检查我的代码在哪里不好或哪里好?
例如我有while-do循环:
while read -r date month size;
do
...
...
done < file.tmp
如何使用awk更快地运行?
答案 0 :(得分:2)
这取决于你如何使用bash。为了说明,请考虑如何对可能大量的整数求和。
这个函数完成了Bash的用途:作为调用其他实用程序的控制逻辑。
sumlines_fast() {
awk '{n += $1} END {print n}'
}
它在一百万行文件上运行0.5秒。这是可以非常有效地用于较大文件的bash代码。
同时,此函数执行Bash不适用的功能:作为通用编程语言:
sumlines_slow() {
local i=0
while IFS= read -r line
do
(( i += $line ))
done
echo "$i"
}
此功能很慢,需要30秒才能将相同的百万行文件相加。你不应该为更大的文件这样做。
最后,这里的功能本来可以由一个根本不了解bash的人写的:
sumlines_garbage() {
i=0
for f in `cat`
do
i=`echo $f + $i | bc`
done
echo $i
}
它将叉子视为自由,因此运行速度非常慢。整理文件需要花费五个小时。你根本不应该使用它。