【发布时间】:2014-05-06 19:08:07
【问题描述】:
我有一个应用程序可以非常仓促地删除日志。它在日志中保留了大约 10,000 行,并且它是不可配置的,这要归功于一次内部程序员。新的传入条目,将最底部的条目推出日志。
所以,我有一个 cron 作业,它每小时拍摄一次日志文件的快照。在快速交易时间,日志与前一个日志重叠不到一千行,但在慢速交易时间,有 5-7 千行重叠。
我的目的是将日志重建为一个大日志,其中每一行只存在一个实例。我目前获得这种结果的方法是,遍历最新日志文件中的每一行并将其与前一个文件中的所有行进行比较,如果不存在,则将其附加到单个日志文件中。但是对于 5-7K 行,这是一个非常长的过程。是否有工具或方法可以发现文件的重叠部分,例如:
log1 log2 log3 Resulting File
1111 ........................ 1111
x1x1 ........................ x1x1
2222 ........................ 2222
3333 ........................ 3333
4444 ........................ 4444
5555 ........................ 5555
6666 6666 ................ 6666
7777 7777 ................ 7777
8888 8888 ................ 8888
9999 ................ 9999
aaaa ................ aaaa
bbbb ................ bbbb
cccc cccc ........ cccc
y1y1 y1y1 ........ y1y1
dddd dddd ........ dddd
eeee ........ eeee
z1z1 ........ z1z1
ffff ........ ffff
gggg ........ gggg
编辑:我已经更新了我想用更好的格式输入和上面的结果输出文件表示来完成的结果。
为了让事情变得更难,这个日志文件没有时间戳。去图......虽然它并不重要,但很高兴知道什么时候发生了什么,但再次记录的目的不是时间。它只是捕捉错误及其频率。
所以,我确定这是一个正则表达式问题,但它们不是我的强项,我不知道如何捕获跨越多行的模式,当我说多行时,它是数百或数千行。
【问题讨论】:
-
您想避免对输入文件进行排序吗?
-
对输入文件进行排序会打乱事件发生的顺序。尽管我不太想知道什么时候发生的事情,到那一刻,我仍然想知道相对于另一个事件在什么时间发生了什么,以确定因果关系。此外,我的日志条目不是一个衬里。一个甚至可以在日志中生成多达 15 行左右的条目,这只有在您将日志作为一个整体而不是一次查看一行时才有意义。因此,正如我在下面的第一个答案中提到的,排序不是一种选择。