在Linux上对多个文件进行连续跟踪和排序?

在Linux上对多个文件进行连续跟踪和排序?

有没有办法结合使用管道或 FIFO 来持续监视几个(相同格式)的日志文件,同时对第一个字段进行排序,然后能够对该连续的、排序后的输出有效地执行 tail -f ?

我可以做类似的事情:-

mkfifo /tmp/日志文件

tail -F -q *.op > /tmp/logfile &

tail -f < /tmp/日志文件

但是我尝试通过 sort -k 1 以某种方式进行管道传输,但无法使其工作。

答案1

这为什么不起作用?

tail -qf *.op | sort -k 1

我猜multitail可能对你有用,除非你提到的日志文件很大。类似

multitail -R 5 -l "sort -k1 *.op"

每五秒执行sort -k1 *.op一次命令,并将其完美地放到多尾输出视图中。当然,如果日志中的最后 X 行就足够了,那么tail -n somenumber *.op | sort -k1在命令部分就可以了。

答案2

这里的问题可能是 sort 正在等待流的结尾,直到到达结尾才能开始。通常 sort 用于一组有限的数据,因此它会等待所有数据,然后进行排序。如果它不等待,它就必须在新数据到来时继续进行排序,这实际上并不适合 unix 管道架构。

也许你可以使用 tail -100l 取出每条日志的最后 100 行,按时间排序 - 并切出尽可能多的行,然后按你想要的方式排序。然后只需循环定期更新即可。

相关内容