题目要求php
有日志 1.log,部份内容以下:html
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.5d6d.com/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 的访问量有多少linux
习题分析运维
这种分析日志的需求,在平时工做中很常见,并且找运维工做时的笔试题里面出现频率也很是多。ui
根据日志内容,能够看到 IP 地址就是第一段内容,因此只须要把 1.log 的第一段给过滤出来,而后近一步统计每个 IP 的量便可。日志
过滤第一段,使用 awk 就能够很容易获得,而统计每一个 IP 的访问量则须要排序而后再计算数量,code
排序使用 sort 命令,统计每一个 IP 访问量用 uniq。orm
习题答案htm
awk '{print $1}' 1.log |sort -n |uniq -c |sort -n
答案解析排序
1. awk 命令在分段方面仍是比较有优点的,这里的{print $1}讲第一段打印出来,awk 能够用-F 指定分隔符,若是不指定分隔符,默认就以空白字符(好比空格、Tab 等),本题中,IP 地址就是在第一段。 2. sort 命令是排序的命令,-n 选项表示以数字的形式排序,若是不加-n,则以 ASCII 排序,本题中的 IP 地址以数字的形式排序更容易区分。 3. uniq 命令是用来去重复的,一个文本中若是有多行内容是如出一辙的,使用 uniq 命令就能够把相同内容的行给删除掉,只留一行。而-c 选项的做用是计算重复的行数,因此在此题中使用 uniq -c 正好能够计算 IP 地址的访问数量。不过,你们必定要注意,uniq 去重的前提是首先要排序。 4. 本题答案里最后没得 sort -n 意思是按访问量大小来排序,请求量越大的 IP 排在越后面,若是要想排在前面,能够加一个-r 选项,即 sort –nr