2016-03-01 120 views
0

这可能听起来矛盾。所以让我解释一下。我有许多使用log4j写入不同文件并旋转的日志文件。我想要做的是将它们合并成更少的文件。合并,排序,维护行顺序

我是如何开始这样做的:
- 使用awk将多行条目连接成一行成一个单独的文件。
- cat awk将文件输出到1个文件。
- 对cat文件进行排序
- 用于分隔连接线的awk。

但我看到,排序是以不同的顺序将条目以相同的秒/ ms按照它们在原始输出文件中出现的顺序排列。这可能不是一笔巨大的交易。但是,我不喜欢它。我如何去做我想做的事情(在分拣时保持原始行顺序)的任何想法?我宁愿不写我自己的程序,如果可能的话,也想使用本地的linux utils。但是,我接受这样做的最好方式(Perl,Python等)。

我想过把输出文件从最高到最低(log4j旋转文件),这样我就不必排序。但是,这只能解决文件写入同一个日志文件(file1.0.log,file1.1.log等)的问题。但是当需要将file2与file1合并时,这没有帮助。

谢谢 格雷格

回答

1

你说什么是“稳定”排序。 sort上有一个-s选项,它可以给你你想要的。

Stability in sorting algorithms

+0

谢谢。那样做了。它最初返回了意外的结果。但是,这是基于使用的“关键”,并且必须相应地进行调整-k。干杯! – Gregg

+0

好价钱。 (是的,容易被抓到的一个事情是'-k'键总是有一个开始和一个结束,而'',end'没有被指定的默认是行尾。) –