我需要从流中剪切一些东西,但看起来,在EOL或EOF出现之前,最后一行不能处理。
我的bash命令:
tail -n 5 -F /data/apache/log/error/error-log | cut -d ' ' -f1-5
日志文件包含例如:
[Wed Jan 14 09:00:00 2015] [error] Error 1
[Wed Jan 14 09:10:00 2015] [error] Error 2
[Wed Jan 14 09:20:00 2015] [error] Error 3
[Wed Jan 14 09:30:00 2015] [error] Error 4
[Wed Jan 14 09:40:00 2015] [error] Error 5
但我的输出是:
[Wed Jan 14 09:00:00 2015]
[Wed Jan 14 09:10:00 2015]
[Wed Jan 14 09:20:00 2015]
[Wed Jan 14 09:30:00 2015]
有没有办法让切割过程(和输出)最后,如果有所有需要的列(前五个)已经流式化,那么未完成的行?
我想要的输出应该包含来自stream的最后一行:
[Wed Jan 14 09:00:00 2015]
[Wed Jan 14 09:10:00 2015]
[Wed Jan 14 09:20:00 2015]
[Wed Jan 14 09:30:00 2015]
[Wed Jan 14 09:40:00 2015]
//编辑 答案"删除-F"没用,因为我需要直播。每当apache将新条目添加到日志中时,我需要立即使用cut进行处理。没有用户交互,没有再次运行脚本等。只需按照实时流程处理流,即“剪切”。在处理(和输出)行之前不要等待EOL。 如果那是不可能的,那很好,我试着找到解决方法,但请不要告诉我在需要直播时不要使用实时流!
答案 0 :(得分:2)
最后,经过一些测试,我发现问题不是tail
而是cut
。以cut
替换awk
可解决问题:
tail -n 5 -F /data/apache/log/error/error-log | awk '{print $1, $2, $3, $4, $5}'
答案 1 :(得分:-1)
是否真的有必要-F
(关注和重试)选项?
删除它,它会工作。