从流中切出等待EOL / EOF字符

时间:2015-01-14 08:57:52

标签: bash cut

我需要从流中剪切一些东西,但看起来,在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。 如果那是不可能的,那很好,我试着找到解决方法,但请不要告诉我在需要直播时不要使用实时流!

2 个答案:

答案 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(关注和重试)选项?
删除它,它会工作。