过滤日志文件

过滤日志文件

我尝试按功能过滤日志文件例如:

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

相关内容