Awk

過濾日誌文件

  • April 15, 2017

我試圖通過功能過濾我的日誌文件例如:

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
sed '/\//!{H;d};G;/m=\(.*\)\n.*\1/d;P;d' file log

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

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

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頁面。

引用自:https://unix.stackexchange.com/questions/358730