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