2013-08-26 58 views
0

試圖對日誌文件(即過去30天內的所有反彈)進行精確查詢。我不認爲stdin會拉zcat信息,我認爲也有一個錯誤傳遞給awk的變量。awk grep最近30天內的關鍵字日誌

home # lastDate=$(date -d "last month" 2>&1 {$1, $2, $3}) | cat /var/log/messages | zcat /var/log/messages-* | awk '$0>=from&&$0<=to' from='{ print date +"%m-%d"}' to=$lastDate '{print to}' | grep -i reject 
awk: fatal: cannot open file `{print to}' for reading (No such file or directory) 

其中朗聲道:

lastDate=$(date -d "last month" 2>&1 {$1, $2, $3})|awk '{print lastDate}' 



no error, no output 

日期-D 「上個月」 週五7月26日七時十三分四十秒UTC 2013

+0

的lastDate命令也不行。您需要從日期命令中選擇哪些字段? – Raghuram

+0

你認爲這個命令應該做什麼? 'date -d「上個月」2>&1 {$ 1,$ 2,$ 3}' – anubhava

+1

您的命令行毫無意義,它只是僞shell和僞awk代碼的隨機片段。告訴我們你想要做什麼,並提供一些示例輸入和預期輸出。 –

回答

0

不要用背部抽筋,使用圓括號:

awk 'tolower($0)~/reject/ && $0~Date' Date=$(date -d'now-30 days' +[%d/%b:%H:%M:%S) /var/log/messages && zcat /var/log/messages-* 

在您的文章,您不使用日期,這樣就可以獲得所有的記錄,無論它是什麼日期

PS更新您的文章#1,而不是發佈新。

編輯: 如果你喜歡一個範圍的日期,而不是一天使用30天前,試試這個:

awk 'tolower($0)~/reject/ && $0>=from && $0<=to' from=$(date -d'now-30 days' +[%d/%b:%H:%M:%S) to==$(date +[%d/%b:%H:%M:%S) /var/log/messages && zcat /var/log/messages-* 
+0

oops,第一個/ var/log/messages永遠不會被讀取。 – brad

+0

和關鍵字拒絕沒有發現沒有添加| grep拒絕到底 – brad

+0

我的第一個消息也沒有讀取嗎? – brad