2017-07-06 28 views
0

命令:獲取awk的結果大於X

grep "redirect=on" access_log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -3 

輸出是:

34 3.247.44.149 
6 5.218.131.185 
3 7.173.135.94 

問題:如何輸出只有在NR是大於10。在這種情況下:

34 3.247.44.149 

我試過已經玩過$ 1> 10,但$ 1是IP而不是數字。

謝謝。

+1

如何發佈要處理的數據而不是已經彙總的輸出? –

+0

grep「redirect = on」access_log – labu77

+0

從'access_log'發佈一個片段,讓我們說前10行。 post'head access_log' output – RomanPerekhrest

回答

2

採用單awk的

awk -F'[[:space:]]+|?' '$8=="redirect=on"{ a[$1]++ } 
    END{ for(ip in a) if(a[ip] > 10) print a[ip],ip }' access_log 
  • -F'[[:space:]]+|?' - 場分離

  • $8=="redirect=on" - 考慮與查詢參數只記錄"redirect=on"

  • a[$1]++ - 計算相同的IP地址發生次數

+0

就像一個魅力。非常感謝羅馬 - 非常聰明的解決方案:) – labu77

+0

@ labu77,不客氣(我已經添加了一些解釋) – RomanPerekhrest