我正在梳理一个 webapp 的日志文件,以获得突出的语句。
大多数线条相似且无趣。我会通过 Unix 传递它们uniq
,但是不会过滤任何内容,因为所有行都略有不同:它们都有不同的时间戳,类似的语句可能会打印不同的用户 ID,等等。
有什么方法和/或工具来获得与其他明显不同的线条?(但是,再次,不是精确的重复)
我正在考虑使用 Python 的difflib,但这似乎是为了区分两个文件,而不是同一文件中的所有行对。
[编辑]
我假设该解决方案将为每一行给出一个唯一性分数。因此,我的意思是“显着不同”,我选择了一个阈值,该阈值必须超过唯一性得分才能使任何行包含在输出中。
在此基础上,如果还有其他可行的定义方式,欢迎讨论。此外,该方法不必具有 100% 的准确率和召回率。
[/编辑]
例子:
我更喜欢尽可能通用的答案。我知道我可以在开始时去掉时间戳。剥离结尾更具挑战性,因为它的语言可能与文件中的任何其他内容完全不同。这些细节是我之前回避具体例子的原因,但因为有人问......
类似1:
2009-04-20 00:03:57 INFO com.foo.Bar - URL:/graph?id=1234
2009-04-20 00:04:02 INFO com.foo.Bar - URL:/graph?id=asdfghjk
类似2:
2009-04-20 00:05:59 INFO com.baz.abc.Accessor - Cache /path/to/some/dir hits: 3466 / 16534, 0.102818% misses
2009-04-20 00:06:00 INFO com.baz.abc.Accessor - Cache /path/to/some/different/dir hits: 4352685 / 271315, 0.004423% misses
不同1:
2009-04-20 00:03:57 INFO com.foo.Bar - URL:/graph?id=1234
2009-04-20 00:05:59 INFO com.baz.abc.Accessor - Cache /path/to/some/dir hits: 3466 / 16534, 0.102818% misses
在不同的 1 情况下,我希望返回两条线,但不希望返回类似它们的其他线。换句话说,这两条线是不同的类型(然后我可以稍后只要求统计上罕见的线类型)。一方面,这两者之间的编辑距离要大得多。