題目要求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