筛选日志文件并选择仅显示唯一值

时间:2013-08-10 23:58:28

标签: logging filter

我需要查看多个文件中的数千个日志条目,并查找包含特定单词的行。从包含一个单词的行列表中,我需要过滤掉属于该行的唯一字符串的行。

例如,请参阅下面的日志文件,并假设我需要查找包含“Test”一词的所有日志行。然后,在包含单词“Test”的所有那些行中,我需要查看该行的其余部分,并且只选择每个事件的一个实例。例如,如果有两行包含“源192.168.0.1端口23目标192.168.0.2端口23”,则无论该行的其余部分是什么,我只想记录该行的一个实例。

1 个答案:

答案 0 :(得分:0)

在* nix命令行上,有grep(实现之间略有不同)。使用GNU / grep时,会出现第一个匹配时停止的“-m”开关,例如:

$ grep Test log.txt | grep -m1 'Source 192.168.0.1 Port 23 Destination 192.168.0.2 Port 23'
-10-30-123-012-031-22 Test Source 192.168.0.1 Port 23 Destination 192.168.0.2 Port 23 djlkdj

搜索例如在日志文件中“测试”,然后只关心某些部分,我喜欢用sed“清理”日志文件:

$ grep Test log.txt | sed 's/.*Test/Test/;s/ djlkdj$//' | sort | uniq -c
   4 Test Source 192.168.0.1 Port 23 Destination 192.168.0.2 Port 23
   2 Test Source 192.168.0.1 Port 23 Destination 192.168.0.222 Port 25
   4 Test Source 192.168.0.1 Port 25 Destination 192.168.0.2 Port 23
   2 Test Source 192.168.5.1 Port 23 Destination 192.168.0.2 Port 23

不确定这是否是你想要的。