大多数线条相似且无趣.我会通过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
在不同的情况下,我希望两条线都返回,但不是像其他线一样.换句话说,那两行是不同的类型(之后我可以只询问统计上罕见的线型).一方面,这两者之间的编辑距离要大得多.
解决方法:
我不知道一个适合你的工具,但如果我要自己动手,我会这样做:
据推测,原木线有一个明确的结构,不是吗?所以
>解析该结构上的线条
>编写一些非常基本的相关过滤器(只从返回的解析结构返回一个简单数字的函数)
>通过一组过滤器运行已解析的行,并根据总分进行剪切
>可能会通过更多过滤器的结果将剩余的行分类到各个箱中
>生成报告,将垃圾箱转储到文件或其他输出
如果您熟悉unix工具procmail,我建议为您的数据定制类似的处理方法.
正如评论中的zacherates说明,您的过滤器通常会忽略时间戳(可能还有IP地址),只关注内容:例如,真正长的http请求可能代表攻击……或者适用于您的域的任何内容.
您的分箱过滤器可能与几个选定字段上的哈希一样简单,或者您可能尝试使用Charlie Martin’s suggestion执行某些操作并使用编辑距离度量.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。