過濾日誌文件

過濾日誌文件

我嘗試按功能過濾日誌檔案例如:

195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&xxxx...
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer&xxxx...
197.xx.x.x - - [13/Apr/2017:09:10:xx +0200] "POST /userx/index.php?m=meeting&xxxx...
197.xx.x.x - - [13/Apr/2017:09:20:xx +0200] "POST /userx/index.php?m=dashboard&xxxx...

在這種情況下,我的功能是聯絡人、客戶、會議、儀表板,我嘗試忽略預設的歡迎頁面。我用了

awk '$7 !~ /m=dashboard/ ' log file

我的問題是我是否可以忽略文件中的更多功能?

cat file:
dashboard
meeting

為了只有這一行:

195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer

答案1

sed '/\//!{H;d};G;/m=\(.*\)\n.*\1/d;P;d' file log

說明:先讀取file過濾器關鍵字,然後讀取日誌檔。包含 no 的行/被解釋為關鍵字並附加到保留空間 ( H)。其他行將附加保留空間 ( G),並且如果 後面的關鍵字m=在關鍵字清單 ( /m=\(.*\)\n.*\1/d) 中重複,則將被刪除。如果沒有,則列印時不含附加保留空格 ( P)。

答案2

由於你的問題現在似乎更有意義,我認為你正在尋找這樣的東西:

awk -F= 'NR==FNR{l[$NF]=1; next} { if (!l[$NF]) print;}' ignore_words your_log_file

編輯

正如 Sundeep 在上面的評論中指出的,您可以使用 grep,如下所示:

grep -Fvf ignore_words log_file

若要了解選項的-Fvf用途,請參閱man grep頁面。

相關內容