两个小脚本的效率对比

处理一个比较大的日志,1.2G

$du -h access.log
1.2G    access.log

第一个脚本

$time awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
 130536 218.75.54.156
 128416 116.10.195.227
 125060 222.133.50.154
 117380 219.234.249.139
  99588 124.128.25.147
  86816 218.75.54.154
  84888 123.151.148.185
  77768 218.58.228.197
  76804 119.60.16.60
  75764 60.190.160.120

real    1m45.855s
user    1m0.240s
sys     0m37.962s

第二个脚本

$time awk '{hash[$1]++}END{for(x in hash)print hash[x],x}' access.log | sort -nr | head -10
130536 218.75.54.156
128416 116.10.195.227
125060 222.133.50.154
117380 219.234.249.139
99588 124.128.25.147
86816 218.75.54.154
84888 123.151.148.185
77768 218.58.228.197
76804 119.60.16.60
75764 60.190.160.120

real    0m28.625s
user    0m4.180s
sys     0m21.334s

差距好大呀,第二个之所以快,是一个原因用了awk的散列表,所以对文件的遍历比第一个少很多,另一个原因管道用的少,io就少。

posted @ 2013-06-22 23:48  sunsweet  阅读(170)  评论(0编辑  收藏  举报