有日志 1.log,部分内容如下:
112.111.12.248 - [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com "/seccode.php?update=0.5593110133088248" 200"http://formula-x.haotui.com/registerbbs.php" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)"
61.147.76.51 - [25/Sep/2013:16:08:31 +0800]xyzdiy.5d6d.com "/attachment.php?aid=4554&k=9ce51e2c376bc861603c7689d97c04a1&t=1334564048&fid=9&sid=zgohwYoLZq2qPW233ZIRsJiUeu22XqE8f49jY9mouRSoE71" 301"http://xyzdiy.×××thread-1435-1-23.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
请统计出每个IP的访问量是多少?
根据日志内容,可以看到IP地址就是第一段的内容,所以只需把1.log的第一段给过滤出来,然后进一步统计每个IP的数量即可。
过滤第一段,使用awk就可以了,而统计每个IP的访问量则需要排序然后再计算数量,排序使用sort命令,统计每个IP的访问量用uniq。
这道题,用shell脚本一条命令就足够了:
awk ‘{print $1}‘ 1.log | sort -n | uniq -c | sort -n
解释:
这道题目还有另一种解法,明天再更新吧。
原文地址:http://blog.51cto.com/hellocjq/2096299