用 awk 來處理 apache日誌

來源:互聯網
上載者:User

 

用 awk 來處理 apache日誌

awk 簡介:

awk於1970年誕生于貝爾實驗室,是一門用於處理文本資料的程式語言,名稱來自於3位作者名字的首字母(Alfred Aho, Peter Weinberger, and Brian Kernighan),gawk為GNU awk。

常量符:

ARGC 命令列變元個數
ARGV 命令列變元數組
FILENAME 當前輸入檔案名稱
FNR 當前檔案中的記錄號
FS 輸入欄位分隔字元,預設為一個空格
RS 輸入記錄分隔字元
NF 目前記錄裡域個數
NR 到目前為止記錄數
OFS 輸出域分隔字元
ORS 輸出記錄分隔字元


通常 Apache 日誌格式如下所示:

`127.0.0.1 - - [02/Sep/2009:17:12:03 +0800] "GET /index.php?a1=100&a2=good HTTP/1.1" 200`

假設檔案 my-access_log 裡面存在上面這條日誌,我們使用如下的命令來分析這條日誌:

#awk '{printf "%s/n%s/n%s/n%s/n%s/n%s/n%s/n%s/n%s/n",$1,$2,$3,$4,$5,$6,$7,$8,$9}' my-access_log
127.0.0.1
-
-
[02/Sep/2009:17:12:03
+0800]
"GET
/index.php?a1=100&a2=good
HTTP/1.1"
200

從結果中可以看到 awk 是用空白字元將一行文本分隔成若干個欄位,127.0.0.1 即為第一個欄位,狀態代碼200為最後一個

樣本:

1,計算a2=good的日誌的條數

#awk '{$7 ~ /a2=good/}' my-access_log | wc -l

2,與運算,a2等good && 請求時間大於17:00:00

#awk '{if( ($7 ~/a2=good/) &&  $4>"[02/Sep/2009:17:00:00") print $1}' | wc -l

3,調用awk命令檔案

#awk -f commond.awk


條件運算子和關係運算子跟C語言類似
與或非(&&,||,!)
大於,小於,等於,不等於(>,<,==,!=)

正則匹配符
匹配(~)
不匹配(!~)

未完待續,初級研究,僅供參考。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.