學習筆記 利用awk分析大型WEB日誌 待完善

2021-09-30 13:23:16 字數 2207 閱讀 7152

(一) 對於大型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...