尾巴-f到grep切成不正常

时间:2013-01-16 14:29:04

标签: bash shell grep tail cut

我正在尝试构建一个shell脚本来监控一些日志文件。 我正在使用这样的命令:

tail -f /var/somelog | grep --line-buffered " some test and p l a c e h o l d e r" | cut -f 3,4,14 -d " "

日志文件如下:

some test and p l a c e h o l d e r 3
some test and p l a c e h o l d e r 4
some test and p l a c e h o l d e r 5
some test and p l a c e h o l d e r 6

等等.. 我的问题是该命令的输出不显示最后一行

some test and p l a c e h o l d e r 6

直到

some test and p l a c e h o l d e r 7

已添加到日志中。

我希望我明白我的问题。任何人都可以帮我解决这个问题吗? 谢谢:))

1 个答案:

答案 0 :(得分:22)

问题几乎肯定与grep和cut缓冲输出有关。这是一个应该让你解决问题的黑客,虽然我确信有更好的方法来做到这一点:

tail -f /var/somelog | while read line; do echo "$line" | grep "some test and p l a c e h o l d e r" | cut -f 3,4,14 -d " "; done

(不要忘记命令末尾的; done

或者,因为gawk没有缓冲它的输出,你可以使用它代替cut来避免繁琐的while循环:

tail -f log | grep --line-buffered "some test and p l a c e h o l d e r" | gawk '{print $3,$4,$14}'

查看http://www.pixelbeat.org/programming/stdio_buffering/了解有关缓冲问题的更多信息。