(一) 對於大型web日誌(比如8g),可以用awk程式設計分析日誌,滿足自己的特別需求(awk適合標準輸入,再標準輸出的分析程式設計):
如8g日誌:
web日誌一般格式比較標準,適合awk來抽取需要的部分字段。
可先將web日誌中需要的字段抽取出來,存入乙個檔案中,比如我抽取第一列(1)
:時間,
第三列(
3):請求站點,倒數第三列(10)
:訪問站
點,倒數
第二列(
11):該次請求狀態(200表示ok),倒數最後一列($12):該次請求花費時間。
利用awk命令:
awk -f '\t' '' access_log.20150907 > product_log_step1.res
分析:先得到幾百m的檔案再說,為了方便,否則每次針對8g的檔案來執行很頭疼。。原始檔是access_log.20150907,根據 『\t』 分割後原始檔每一行得到12小塊,再根據需要獲取1,
3,10,
11,12,
只不過針
對 1,$3再根據自己的需求split掉多餘的部分,最後儲存在伺服器上同目錄下的product_log_step1.res檔案(檔案自己命名,也可以.txt格式)
product_log_step1.res檔案如下:
再根據自己的需求,比如統計請求正常的次數,5分鐘內每秒請求次數,等等。。。
比如需求:
1、每5分鐘內,平均每秒請求次數(共24小時,總請求一千萬次左右)
2、請求狀態正常次數,非正常次數
3、0-1秒內請求次數,1-2秒請求次數,2-3秒請求次數,3-4秒請求次數,4-5秒請求次數,大於5秒請求次數
生成檔案:
**如下:
awk -f "\t"
'function gethours(times)
function getminutes(times)
begin
}for(k=0; k<2; k++)
for(k=0; k<6; k++)
}else
if($3>"0" && $3
<="1")else
if($3>1 && $3
<=2)else
if($3>2 && $3
<=3)else
if($3>3 && $3
<=4)else
if($3>4 && $3
<=5)else
}end
}printf("ok \t\t not_ok\n");
printf("%s \t %s\n",request_state[0],request_state[1]);
printf(" (0s-1s)\t (1s-2s)\t (2s-3s)\t (3s-4s)\t (4s-5s)\t (>5s)\n");
printf("%s\t\t %s\t\t %s\t\t %s\t\t %s\t\t %s\n",request_time[0],request_time[1],request_time[2],request_time[3],request_time[4],request_time[5]);
}' product_log.res > product_page_log.txt
只要按照awk語言格式編寫就行,格式如下:
然後根據業務邏輯把需要的資料的資料抽取出來,儲存在乙個檔案中吧,比如**中的product_page_log.txt檔案,原始檔是product_log.res。
(二) awk,sed,grep,sort,uniq,wc,split,tail,less 命令
(待完善)
awk學習筆記
單詞計數 cat filename awk end 排序演算法 bin bash function f while n 1 do f 1 shift done wait 顯示特殊符 var i am a student echo var awk 結果為 am a i student echo var...
awk學習筆記
1 將第一列重複的元素去掉,只保留第乙個 root centos awk test cat sed u.txt haha 1 nihao 1 haha 3 hehe 4 heihei 5 heihei 6 1 haha 1 heihei root centos awk test awk f a 1 ...
AWK學習筆記
1.awk是三個 人名的縮寫,他們是 aho peter weinberg和 brain kernighan。awk是一種樣式掃瞄與處理工具。但其功能卻大大強於sed和grep。awk支援對記錄和字段的處理,其中對字段的處理是grep和sed不能實現 的,這也是awk優於二者的原因之一。2.與其它u...