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 取前十條數據
命令執行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章