Shell 中常見的日誌統計方法

來源:互聯網
上載者:User

標籤:

前面我發布過"Hadoop兮,殺雞別用牛刀,python+shell實現一般記錄檔的查詢、統計", 需要結合python, 可能還是有一定的門檻, 現將shell部分剝離出來. 舉例一些最基本的日誌統計方法.

(1)查看檔案


more crawler.log

查看crawler.log日誌


tail -n 100 crawler.log

查看crawler.log的最後100行


(2)匹配統計


cat *.log | grep "ERROR" |wc -l

統計在*.log中出現ERROR的行數, 去掉最後一個管道(即: cat *.log | grep "ERROR" )可以查看具體匹配的是哪些行, 大檔案不建議這樣做.


(3)Regex匹配統計


cat *.log | grep ".*Append \(http:\/\/.*\?\) to .*"

查看*.log中匹配Regex .*Append (http:\/\/.*\?) to .*  的行, 為什麼括弧前要加斜杠呢? 這是shell中Regex比較特殊的地方, 括弧還有其他個別符號前需要加斜杠.


(4)將匹配Regex的內容抽取出來, 排重, 再統計.

比如說一個爬蟲記錄檔中, 我要統計被抓取網址的數量, 統計的網址不能重複. 已知日誌的格式為" Append http://網址 ......." , 同一個網址可能出現多次, 運用上一個統計方法統計出來的是網址出現的總數量, 沒有將網址排重, 於是:


cat * |grep "Append" |sed ‘s/.*Append \(http:\/\/.*\?\) to .*/\1/g‘|uniq|wc -l

注意第一個管道grep將符合規則(含有"Append")的行抽出來, 第二個管道sed是shell中家喻戶曉的替換命令, 使用方式為 sed ‘s/Regex/替換的內容/g‘, 我們在Regex裡使用了分組(就是那個括弧), 替換內容裡用到了\1代表第一個分組, 如果是第二個則\2,以此類推. 我們先是找到匹配的行,用匹配的第一個分組替換了整行, 這個分組正是我們需要的網址, 因此達到了提取網址的作用. 下一個管道unique是將重複的網址排除, 最後一個管道wc -l是數量統計.



(5)最大數/最小數/平均數統計

基於上一個例子, 如果我們提取的是一個數字, 要進行最大數/最小數/平均數的統計, 需要用到awk管道了, 將wc -l 換成:


awk ‘{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1< min) {min=$1}; total+=$1; count+=1} END {print total/count, min, max}‘


(6)分組統計

基於第(4)個例子, 如果要統計每個網址出現的次數, 實作類別似於mysql group by的效果. 將wc -l 換成:


awk  ‘{a[$1]++}END{for (j in a) print j","a[j]}‘

輸出格式: 分組,出現的次數



只要掌握以上的基本用法, 可以滿足大部分的日常統計需求了, 其中awk的寫法基本是固定的, 需要改動的只是Regex的部分.



Shell 中常見的日誌統計方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.