1. 程式人生 > >shell處理日誌檔案常用命令

shell處理日誌檔案常用命令

學會用shell分析日誌只要一上午!!!

很多地方分享了日誌分析的shell指令碼,但是基本沒說每個命令符的具體含義,學習成本還是很高,在這裡總結下,方便大家快速入門。

1、在Windows下的使用者要使用shell命令符的話請先安裝cygwin,安裝方法自行Google(搜技術問題請使用google,百度搜不到活該)

2、下面粗略介紹下SEO日誌分析常用的命令符用法,需要詳細瞭解每個命令符請使用Google。

less 檔名 檢視檔案內容 按“q” 退出

cat 檔名 開啟檔案,可以多次開啟幾個檔案 | cat 1.log 2.log |cat *.cat
grep -引數 檔名
-i 不區分大小寫
-v 顯示不符合條件的所有行
-c 顯示符合條件的所有行數(符合條件的數量)

egrep 屬於grep的升級版,在正則這一塊的支援更完善,使用正則的時候建議使用egrep

head -2 檔名 顯示2行
head -100 檔名 | tail -10 >>a.log 提取檔案第91-100行資料

wc -引數 檔名 統計文字大小,字元多少,行數
-c 統計文字位元組數
-m 統計文字字元數
-l 統計文字有多少行

sort – 引數 檔名 對檔案進行排序
-n 對檔案按照數字排序
-r 反向排序

uniq -引數 檔名 對檔案去重,去重前需要使用排序
-c 顯示資料重複的次數

split -引數 檔名 對檔案進行切割
-100 (每100行切割成一個檔案)
-C 25m/b/k (每25兆/位元組/K 分割成一個檔案)

| 管道,把上一條命令的結果傳輸給下一條命令

“>” 和“>> ” 重定向寫入檔案中 “>”相當於“w”清空並寫入 “>>”相當於“a” 追加進檔案

awk -F ‘分割符’ Pattern {action} 檔名 使用指定的字元對每一行資料進行分段,預設是空格(網站日誌就是空格分開)
-F後面跟的是分隔符
pattern 就是action執行的條件,這裡可以使用正則表示式
n0表示整行資料
NF表示當前記錄的欄位數
$NF 表示最後一個欄位
BEGIN和END,這兩者都可用於pattern中,提供BEGIN和END的作用是給程式賦予初始狀態和在程式結束之後執行一些掃尾的工作

bash shell.sh 執行shell.sh指令碼

dos2unix xxoo.sh 將“\r\n”轉換成“\n” Windows——>linux (由於Windows和Linux下的換行符不同,所以我們在Windows下面下的程式碼需要使用dos2unix 轉換成Linux下的換行符,否則執行shell指令碼會報錯)

unix2dos xxoo.sh 將“\n”轉換成“\r\n” linux——>Windows
rm xx.txt 刪除xx.txt檔案

3、一些簡單的命令符介紹到這裡,需要了解shell,建議大家檢視相關的書籍.

下面我們開始使用shell分析日誌

1、切割百度的抓取資料(將檔案切割出來對專門的爬蟲資料進行處理能提高效率)

複製程式碼 程式碼如下:

cat log.log |grep -ibaiduspider' >baidu.log

2、網站狀態碼個數查詢

複製程式碼 程式碼如下:

awk ‘{print $9}' baidu.log|sort|uniq -c|sort -nr

3、百度總抓取量

複製程式碼 程式碼如下:

wc -l baidu.log

4、百度不重複抓取量

複製程式碼 程式碼如下:

awk ‘{print $7}' baidu.log|sort|uniq|wc -l

5、百度平均每次抓取的資料大小(結果是KB)

複製程式碼 程式碼如下:

awk ‘{print $10}' baidu.log|awk ‘BEGIN{a=0}{a+=$1}END{ print a/NR/1024}'

6、首頁抓取量

複製程式碼 程式碼如下:

awk ‘$7~/\.com\/$/' baidu.log|wc -l

7、某目錄抓取量

複製程式碼 程式碼如下:

grep ‘/news/' baidu.log|wc -l

8、抓取最多的10個頁面

複製程式碼 程式碼如下:

awk ‘{print $7}' baidu.log|sort|uniq -c|sort -nr|head -10

9、找出抓取的404錯誤頁面

複製程式碼 程式碼如下:

awk ‘$9~ /^404$/ {print $7}' baidu.log|sort|uniq|sort -nr

10、找出抓取了多少js檔案和檔案抓取的次數

複製程式碼 程式碼如下:

awk ‘$7~ /.js$/ {print $7}' baidu.log|sort|uniq -c |sort -nr