Linux awk統計日志中出現過的IP(或出現次數最多的N個IP)


awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。

awk的用法

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
第一步:運行BEGIN{ commands }語句塊中的語句。

第二步:從文件或標准輸入(stdin)讀取一行。然后運行pattern{ commands }語句塊,它逐行掃描文件,從第一行到最后一行反復這個過程。直到文件所有被讀取完成。

第三步:當讀至輸入流末尾時,運行END{ commands }語句塊。

BEGIN語句塊在awk開始從輸入流中讀取行之前被運行,這是一個可選的語句塊,比方變量初始化、打印輸出表格的表頭等語句通常能夠寫在BEGIN語句塊中。

END語句塊在awk從輸入流中讀取全然部的行之后即被運行。比方打印全部行的分析結果這類信息匯總都是在END語句塊中完畢,它也是一個可選語句塊。

pattern語句塊中的通用命令是最重要的部分,它也是可選的。假設沒有提供pattern語句塊,則默認運行{ print },即打印每個讀取到的行。awk讀取的每一行都會運行該語句塊。

這三個部分缺少任何一部分都可以。

可用awk來統計固定格式日志里的一些數據,如日志中出現過所有不同的IP

awk ‘{i=$1;count[i]++}END{for(i in count)print(i,count[i])}’ /var/log/httpd/access_log
awk對文件進行流處理,每次讀取一行。$1就是IP,count[i]++是將IP作為一個數組的下標,並且使得統計這個IP所對應的數組元素自增1.END后面的語句是打印結果,只執行一次。

也可以用來找出訪問次數最多的ip。

awk '{a[$1] += 1;} END {for (i in a) printf("%d %s\n", a[i], i);}' 日志文件 | sort -n | tail -n 10 #用tail顯示最后10行
首先用awk統計出來一個列表,然后用sort進行排序,最后用tail取最后的10個。

以上參數可以略作修改顯示更多的數據,比如將tail加上-n參數等,另外日志格式不同命令也可能需要稍作修改。

 

當前WEB服務器中聯接次數最多的ip地址

netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -nr
查看日志中訪問次數最多的前10個IP

cat access_log |cut -d ' ' -f 1 | sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 | less
查看日志中出現100次以上的IP

cat access_log |cut -d ' ' -f 1 | sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr | less
查看最近訪問量最高的文件

cat access_log | tail -10000 | awk '{print $7}' | sort | uniq -c | sort -nr | less
查看日志中訪問超過100次的頁面

cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less
統計某url,一天的訪問次數

cat access_log | grep '12/Aug/2009' | grep '/images/index/e1.gif' | wc | awk '{print $1}'
前五天的訪問次數最多的網頁

cat access_log | awk '{print $7}' | uniq -c | sort -n -r | head -20
從日志里查看該ip在干嘛

cat access_log | grep 218.66.36.119 | awk '{print $1"\t"$7}' | sort | uniq -c | sort -nr | less
列出傳輸時間超過 30 秒的文件

cat access_log | awk '($NF > 30){print $7}' | sort -n | uniq -c | sort -nr | head -20
列出最最耗時的頁面(超過60秒的)

cat access_log | awk '($NF > 60 && $7~/\.php/){print $7}' | sort -n | uniq -c | sort -nr | head -100
————————————————
版權聲明:本文為CSDN博主「jirryzhang」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jirryzhang/article/details/82467554


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM