1. 程式人生 > >shell 指令碼完成對日誌檔案的提取

shell 指令碼完成對日誌檔案的提取

前言

問題

提取x xx介面的的請求報文


正文

解決方案

使用shell指令碼使用awk 去掉報文中的換行符,以便進行grep,進而使用sed進行替換操作,最後輸出到指定文字。

如果是壓縮檔案gz,可以使用zmore 和zgrep 來代替more以及grep
  1. 確定日誌檔案的範圍:日期,以及檔案清單,這兩個引數常常作為引數,例如:20,webmca.lst
  2. 書寫shell指令碼:使用for 迴圈進行逐個檔案的處理
  3. 書寫awk 檔案,用於處理日子檔案的格式,比如去掉報文的換行符
  4. 將除錯完成的命令放入迴圈體中

示例:

  • 使用ls 來產生檔案清單:

  • 書寫shell指令碼:
cd ~/trc/$1
for webxxx in `cat ~/kevin/$2`
    do
        # zmore $webxxx |awk -f ~/kevin/rmline.awk| grep xxxx.action |grep -E "[0-9]+\**" | awk -F '[' '{print $2,$4,$6}'|sed 's/];傳送://'|sed 's/]//'
        #more $webxxx |awk -f ~/kevin/rmline.awk| grep xxxx.action |grep -E "[0-9]+\**" | awk -F '[' '{print $2,$4,$6}'|sed 's/];傳送://'|sed 's/]//'

        #more $webxxx |awk -f ~/kevin/rmline.awk| grep 2201194.d |grep -E "[0-9]+\**" | awk -F '[' '{print $2,$4,$6}'|sed 's/];傳送://'|sed 's/]//'

        more $webxxx |awk -f ~/kevin/rmline.awk| grep xxx.d |grep -E "[0-9]+\**" | awk -F '[' '{print $2,$4,$6}'|sed 's/];傳送://'|sed 's/]//'
 
    done

ps: 使用ssh -x 除錯指令碼:

注意:`cat ~/kevin/$2`   符號是鍵盤1左邊的accent符號

反引號(`)之間的命令會被執行,其輸出結果會轉換成一個變數

解釋下命令:

[] devzkna:/home/devzkna/kevin>sh -x ~/kevin/webxxx.sh 30 webxxx.lst >xxx1.txt
+ cd /home/devzkna/trc/30 #30 是引數1,$1
+ cat /home/devzkna/kevin/webxxx.lst # 清單lst 是引數2,$2
+ more WS_xxx.trc
+ awk -f /home/devzkna/kevin/rmline.awk 
+ grep xxx1.dow

+ grep -E <SESSION>[0-9]+\**</SESSION>#grep 支援:BREs、EREs、PREs 正則表示式;grep 指令後不跟任何引數,則表示要使用 ”BREs“,grep 指令後跟 ”-E" 引數,則表示要使用 “EREs“grep 指令後跟 “-P" 引數,則表示要使用 “PREs")

+ awk -F [ {print $2,$4,$6} # awk工作流程是這樣的:讀入有'\n'換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域。 預設域分隔符是"空白鍵" 或 "[tab]鍵",所以$1表示登入用 戶,$3表示登入使用者ip,以此類推。

+ sed s/]// #s :取代,可以直接進行取代的工作!通常這個 s 的動作可以搭配正規表示法!

+ sed s/];傳送:// #sed's/要被取代的字串/新的字串/g'



awk 的示例

/MsgId:/,/<\/ROOT>\]/{

	printf"%s",$0

	if($0 ~/\/ROOT/){  /* 處理這個標籤的時候才換行*/
		printf"\n"
	}

}

總結

1.常用ps 來檢視程序執行情況:

[] devzkna:/home/devzkna/kevin>ps -ef | grep wex.sh
devzkna 270504 344348 0 11時18分07秒 pts/1 0:00 grep wex.sh
devzkna 622734 610482 0 09時28分18秒 pts/3 0:00 more wex.sh

ps [選項]-e 顯示所有程序。-f 全格式。

2.使用istat檢查索引節點。用於檢視檔案的最近訪問情況

[] devzkna:/home/devzkna/kevin>istat wex.sh
Inode 37922 on device 10/8 File
Protection: rw-rw-rw-
Owner: 541(devzkna) Group: 210(xxxx2)
Link count: 1 Length 708 bytes

Last updated: 公元2015年10月30日 星期五 09時55分52秒
Last modified: 公元2015年10月30日 星期五 09時55分52秒
Last accessed: 公元2015年10月30日 星期五 11時13分22秒