awk 線上處理常用模式
awk 處理複雜日志
6.19:
DHB_014_号百總機服務業務日報:廣州 到達數異常!
DHB_023_号百漏話提醒日報:珠海 到達數異常!
6.20:
DHB_014_号百總機服務業務日報:廣州 到達數異常!到
awk -F '[_ :]+' 'NF>2{print $4,$1"_"$2,b |"sort";next}{b=$1}'
# 目前行NF小于等于2 隻針對{print $4,$1"_"$2,b |"sort";next} 有效 即 6.19:行跳過此操作, {b=$1} 仍然執行
# 目前行NF大于2 執行到 next 強制跳過本行,即跳過後面的 {b=$1}
廣州 DHB_014 6.19
一些線上分析處理
分析圖檔服務日志,把日志(每個圖檔通路次數*圖檔大小的總和)排行,也就是計算每個url的總通路大小
說明:本題生産環境應用:這個功能可以用于IDC網站流量帶寬很高,然後通過分析伺服器日志哪些元素占用流量過大,進而進行優化或裁剪該圖檔,壓縮js等措施。
本題需要輸出三個名額: 【被通路次數】 【通路次數*單個被通路檔案大小】 【檔案名(帶URL)】
測試資料:
192.168.1.101 - - [08/Dec/2017:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299
awk '{array_num[$7]++;array_size[$7]+=$10}END{for(i in array_num) {print array_num[i]" "array_size[i]" "i}}'
一些網上練習題:
已知:
wang 4
cui 3
zhao 4
liu 3
liu 3
chang 5
li 2
1 通過第一個域找出字元長度為4的
2 當第二列值大于3時,建立空白檔案,檔案名為目前行第一個域$1 (touch $1)
3 将文檔中 liu 字元串替換為 hong
4 求第二列的和
5 求第二列的平均值
6 求第二列中的最大值
7 将第一列過濾重複後,列出每一項,每一項的出現次數,每一項的大小總和
處理方式
1、字元串長度
awk 'length($1)=="4"{print $1}'
2、執行系統指令
awk '{if($2>3){system ("touch "$1)}}'
3、gsub(/r/,"s",域) 在指定域(預設$0)中用s替代r (sed 's///g')
awk '{gsub(/liu/,"hong",$1);print $0}' a.txt
4、列求和
awk '{a+=$2}END{print a}'
5、列求平均值
awk '{a+=$2}END{print a/NR}'
awk '{a+=$2;b++}END{print a,a/b}'
6、列求最大值
awk 'BEGIN{a=0}{if($2>a) a=$2 }END{print a}'
7、将第一列過濾重複列出每一項,每一項的出現次數,每一項的大小總和
awk '{a[$1]++;b[$1]+=$2}END{for(i in a){print i,a[i],b[i]}}'
轉載于:https://www.cnblogs.com/sharesdk/p/8696565.html