两个小脚本的效率对比详解程序员

处理一个比较大的日志,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就少。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/2483.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论