用awk來比對日期,叫出指定日期的資料

之前由於系統日誌,10日以下和10日以上,會產生多餘的空白,導玫要另外用 if else 去判斷是否小於 10 日等等的語法…

現在只要用以下的語法,就可以輕鬆的篩選出指定的日期、而且不用管是否為 10 日以下、或 10 日以上,沒有空白的問題。

cat secure-20120603 | grep May |awk '{FS=" "} $2 == 30 {print $1 "t " $2}'

說明:

cat secure-20120603

列出 secure-20120603 的日誌檔,裡面有 May 月底和 Jun 月初的資料

grep May

先用管線,篩選出 May 月份的資料

awk '{FS="一個空白"} $2 == 30 {print $1 "t" $2}'

再用管線來判斷,分隔為空白,且欄位 2 等於 30 時,列出欄位 1 和欄位 2

結果:

只要修改 grep 的月份,和判斷的日期,如下:

cat secure-20120603 | grep Jun |awk '{FS=" "} $2 == 2 {print $1 "t " $2}'

就可得到結果:

備註:
http://linux.vbird.org/linux_basic/0330regularex.php#awk

變數名稱 代表意義
NF 每一行 ($0) 擁有的欄位總數
NR 目前 awk 所處理的是『第幾行』資料
FS 目前的分隔字元,預設是空白鍵