ログ ファイルを機能別にフィルター処理してみました。例:
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
ページを参照してください。