ログファイルのフィルタリング

ログファイルのフィルタリング

たとえば、機能別にログファイルをフィルタリングしたいとします。

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/dP

答え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ページをご覧ください。

関連情報