【发布时间】:2012-01-18 11:20:33
【问题描述】:
大家,我正在处理一个大约有 500 万行的日志文件,所以我在 linux 中使用 awk shell
我必须 grep 域并获得日志中最高的 100,所以我这样写:
awk '{print $19}' $1 |
awk '{ split($0, string, "/");print string[1]}' |
awk '{domains[$0]++} END{for(j in domains) print domains[j], j}' |
sort -n | tail -n 100 > $2
运行大约 13 秒
然后我像这样更改脚本:
awk 'split($19, string, "/"); domains[string[1]]++}
END{for(j in domains) print domains[j], j}' $1 |
sort -n | tail -n 100 > $2
运行大约 21 秒
为什么?
你知道awk shell的一行可能会减少cal的总和,它只读取每一行一次,但是时间增加了......
所以,如果你知道答案,请告诉我
【问题讨论】:
-
您的输入数据是什么样的?你想提取和保存什么信息??
-
+1 用于提问、研究和格式化!您是否多次运行此程序,也许有一个高 CPU 任务正在运行以竞争第二次运行?否则,我同意@rjack 的观点,即拆分工作可以提高性能。祝你好运:-)
-
它运行在具有以下信息的 linux 服务器上:cpu: 8 * Intel(R) Xeon
-
我跑了很多次,而且我的任务有时间限制,所以我很关心运行时间。