1. 程式人生 > >Linux命令查找出日誌檔案中訪問量最大的10個ip

Linux命令查找出日誌檔案中訪問量最大的10個ip

寫這篇部落格的主要原因就是之前面試的兩家公司都有問到這個問題,所以便著手研究了一下它的解決方法
問題描述:一個日誌檔案裡逐行儲存著 時間 ip 這種形式的日誌,現在需要讓你使用linux命令查找出日誌檔案中訪問量最大的10個ip
怎麼處理?
1.首先建立模擬資料
這裡博主用python寫了個建立模擬資料的指令碼 檔案內容格式 : 時間戳 ip

#!/usr/bin/python
# -*- coding:UTF-8 -*-
#filename = testdata.py
import random
import time
file = open('/ip.txt','w');
for i in range(0,500):
   num = random.randint(1,10)
   rand_str = time.time()
   fir_1 = random.randint(0,255)
   sec_2 = random.randint(0,255)
   thr_3 = random.randint(0,255)
   fou_4 = random.randint(0,255)
   for j in range(1,num+1):   
      file.write(str(rand_str)+' '+str(fir_1)+'.'+str(sec_2)+'.'+str(thr_3)+'.'+str(fou_4)+'\n')
file.close() 
print 'create sucessful!!'

2.輸入命令

cat ip.txt|awk -F" " '{print $2}'|sort|uniq -c|sort -nrt " "|awk -F" " '{print $2}'|head -10  

每一步命令解釋:
cat ip.txt 將ip.txt檔案內容輸出到終端
| 通過管道符|將左邊命令輸出作為右邊命令輸入(後面|功能類似)
awk -F" " ‘{print $2}’
-F 指定輸入檔案折分隔符 -F" ": 以空格分隔
{print $2} 分隔後每一行就分成了時間戳和ip兩個單元$1指時間$2指ip print $2 即輸出ip
sort 對輸出ip進行排序
uniq -c 檢查及刪除文字檔案中重複出現的行列 -c或–count 在每列旁邊顯示該行重複出現的次數。
此時輸出的資料格式為 出現次數 ip
sort -nrt " " 對輸出結果排序 -n : 依照數值的大小排序 -r : 以相反的順序來排序 -t : <分隔字元> 指定排序時所用的欄位分隔字元
接著繼續用awk 將資料第二列ip輸出
head -10 取前十條資料
命令執行結果:
在這裡插入圖片描述