有没有办法结合使用管道或 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 行,按时间排序 - 并切出尽可能多的行,然后按你想要的方式排序。然后只需循环定期更新即可。