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


咨詢
建站咨詢
