標籤:awk 日誌
前言:首先awk是一門語言,其次跟其他語言相比,awk的優勢是在文本處理、數值計算等方面,在我們日常的營運工作中,awk還有1個很重要的情境是配合sed、grep的使用,正是因為這些,awk是營運工程師最常用的工具之一,下面記錄一下,awk在日誌收集、統計情境的一些最常用的姿勢。
awk使用格式
awk [-F value] [-v var=value]‘program text‘ [files....]
program text:
BEGIN {actions}/pattern/{actions}END{actions}
內建變數
FS--FieldSeparator:域的分隔字元,預設的是以空白符分隔
RS--RecordSeparator 記錄的分隔字元,預設是以分行符號來分隔
FILENAME-- current filename
NF -- Number of Feilds in current record,域的個數
NR-- Number of Record 輸入的記錄數,相當於行號一樣,多個檔案時會接著遞增
FNR-- File Number of Record 輸入的目前記錄數,每個檔案單獨計算
$0-- thewhole record 當前整個記錄
$n --the nth field of the current record 目前記錄的第n個域
awk常用函數
1、split (string, array, field separator)
2、substr(s,p,n) 返回字串s中從p開始長度為n的尾碼部分
3、 length函數返回沒有參數的字串的長度
4、gsub(regular expression, subsitutionstring, target string)
awk擴充使用
awk[options] ‘script‘ FILES
選項
-F:欄位分隔符號
-v:聲明一個變數,FS=:
awk‘{print $1 $2}‘ a.txt:則顯示welcometo
awk‘{print $1,$2}‘ a.txt:則顯示wlecometo
--------------
內建變數
ORS
OFS
FS
RS
NR
NF
FNR
ARGV:數組,儲存命令列本身這個字串,如awk‘{print $0}‘ a.txt b.txt
這個命令中,ARGV[0]儲存awk,ARGV[1]儲存a.txt
ARGC:awk命令的參數個數
----------------
printf命令的使用格式
printfformat,item1
要點:
1、其與print命令最大的不同是,printf需要指定format
2、format用於指定後面的每個item的輸出格式
3、printf語句不會自動列印分行符號
format格式的指示符:
%c:顯示字元的ASCII
%d,%i:十進位的整數
%e,%E:科學計數法顯示數值
%f:顯示浮點數
%g,%G:以科學計數法的格式或浮點數的格式顯示數值
%s:顯示字串
%u:不帶正負號的整數
%%:顯示%自身
修飾符:
N:顯示寬度
-:靠左對齊
+:顯示數值符號
1,統計squid日誌中各個狀態代碼所佔的百分比
# cat /usr/local/squid/var/logs/access.log | awk ‘BEGIN{print "status code","\t""rate"}{count+=1;a[$9]+=1}END{for(i in a) print i,"\t",a[i]/count*100}‘ | sort -nk2status code rate400 0.00412448416 0.00412448478 0.00412448204 0.00618672401 0.02680910 0.0659916301 0.0763028302 0.787775404 2.19628403 2.66441206 5.02567304 17.7043200 71.4339
2,統計squid日誌中訪問次數前10的網域名稱
]# cat /usr/local/squid/var/logs/access.log | awk ‘BEGIN{print "domain","\t","rate"}{count+=1;a[$2]+=1}END{for(i in a){print i,"\t",a[i]}}‘ | sort -nk2 | tailbsy.pp.starschinalive.com 125js1.pcfg.cache.wpscdn.cn 131portal.wsds.cn 162vas.fun.tv 173img.funshion.com 238www.duba.com 277plugin.video.51togic.com 280p1.meituan.net 286res.qxz.37wan.com 306d.ifengimg.com 481
3,統計最近5分鐘的流量
日誌:27.156.95.175 uc.a.yximgs.com "image/webp" [25/Dec/2016:22:17:01 +0800] "GET http://uc.a.yximgs.com/upic/2016/11/27/11/BMjAxNjExMjcxMTIxMTNfODY2MTM1NV8xMzAxODgwMDQ4XzJfMw==_low.webp?tag=1-1482675421-f-0-8a7txqz36n-ce40124930229f39 HTTP/1.1" 200
cat /usr/local/squid/var/logs/access.log | awk ‘{i=int(substr($4,17,2)/5)*5;h=substr($4,14,2);s[h":"i]+=$10;}END{for(i in s)print i,s[i]*8/1024/1024/300"Mbps"}‘21:50 143.537Mbps
4,MISS的網域名稱請求數top10統計
# cat /usr/local/squid/var/logs/access.log | awk ‘{n+=1;if($0~/MISS/)a[$2]+=1}END{for(i in a){print i,a[i],a[i]/n*100}}‘ | sort -nrk2 | headwww.duba.com 237 0.868291p1.meituan.net 163 0.597179pas.suning.com 66 0.241803shopping.suning.com 55 0.20150277g4l9.com5.z0.glb.qiniucdn.com 55 0.201502res.qxz.37wan.com 50 0.183184review.suning.com 41 0.150211static.1sapp.com 32 0.117238s1.vas.wpscdn.cn 30 0.10991fs.ios.kugou.com 25 0.0915919
本文出自 “傑希” 部落格,請務必保留此出處http://jachy.blog.51cto.com/10625380/1886034
日誌統計中awk常見的運用