新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Shell腳本習(xí)題:統(tǒng)計(jì)ip訪(fǎng)問(wèn)情況并分析訪(fǎng)問(wèn)日志
題目要求
有日志 1.log,部分內(nèi)容如下:

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)”
統(tǒng)計(jì)出每個(gè) IP 的訪(fǎng)問(wèn)量有多少
習(xí)題分析
這種分析日志的需求,在平時(shí)工作中很常見(jiàn),而且找運(yùn)維工作時(shí)的筆試題里面出現(xiàn)頻率也非常多。
根據(jù)日志內(nèi)容,可以看到 IP 地址就是第一段內(nèi)容,所以只需要把 1.log 的第一段給過(guò)濾出來(lái),然后近一步統(tǒng)計(jì)每一個(gè) IP 的量即可。
過(guò)濾第一段,使用 awk 就可以很容易得到,而統(tǒng)計(jì)每個(gè) IP 的訪(fǎng)問(wèn)量則需要排序然后再計(jì)算數(shù)量,
排序使用 sort 命令,統(tǒng)計(jì)每個(gè) IP 訪(fǎng)問(wèn)量用 uniq。
習(xí)題答案
awk '{print $1}' 1.log |sort -n |uniq -c |sort -n
答案解析
1. awk 命令在分段方面還是比較有優(yōu)勢(shì)的,這里的{print $1}講第一段打印出來(lái),awk 可以用-F 指定分隔符,如果不指定分隔符,默認(rèn)就以空白字符(比如空格、Tab 等),本題中,IP 地址就是在第一段。
2. sort 命令是排序的命令,-n 選項(xiàng)表示以數(shù)字的形式排序,如果不加-n,則以 ASCII 排序,本題中的 IP 地址以數(shù)字的形式排序更容易區(qū)分。
3. uniq 命令是用來(lái)去重復(fù)的,一個(gè)文本中如果有多行內(nèi)容是一模一樣的,使用 uniq 命令就可以把相同內(nèi)容的行給刪除掉,只留一行。而-c 選項(xiàng)的作用是計(jì)算重復(fù)的行數(shù),所以在此題中使用 uniq -c 正好可以計(jì)算 IP 地址的訪(fǎng)問(wèn)數(shù)量。不過(guò),大家一定要注意,uniq 去重的前提是首先要排序。
4. 本題答案里最后沒(méi)得 sort -n 意思是按訪(fǎng)問(wèn)量大小來(lái)排序,請(qǐng)求量越大的 IP 排在越后面,如果要想排在前面,可以加一個(gè)-r 選項(xiàng),即 sort –nr
分享標(biāo)題:Shell腳本習(xí)題:統(tǒng)計(jì)ip訪(fǎng)問(wèn)情況并分析訪(fǎng)問(wèn)日志
文章鏈接:http://m.fisionsoft.com.cn/article/dpsiphs.html


咨詢(xún)
建站咨詢(xún)
