我需要从流中剪切一些东西,但似乎在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]如果所有需要的列(前五列)都已经流过了,有没有办法让cut process (和output)成为最后一个未完成的行?
我想要的输出应该包含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]//编辑remove-F没有用,直播需要用到每当apache向日志中添加新条目时,我都需要立即使用cut处理它。无需用户交互,无需再次运行脚本等。只是以实时处理流的方式,即'cut‘不等待EOL才处理(和输出)行。如果这是不可能的,很好,我试图找到解决办法,但请不要告诉我,当我需要直播流时不使用直播流!
发布于 2015-01-15 10:30:47
最后,经过一些测试,我发现问题不是tail而是cut。用awk替换cut可以解决这个问题:
tail -n 5 -F /data/apache/log/error/error-log | awk '{print $1, $2, $3, $4, $5}'发布于 2015-01-14 17:22:02
是否真的有必要使用-F (跟随并重试)选项?
去掉它,它就能工作了。
https://stackoverflow.com/questions/27939010
复制相似问题