我需要将某些日志条目输入到perl脚本中,但是我无法使用ARGV或STDIN来使用它。
tail -f messages | grep --line-buffered "auth failure:" | awk '{print $1,$2,$3,$10}' | test3.pl
也许某些东西正在被缓冲,但似乎没有任何东西可以用于test3.pl,但是如果我放弃| test3.pl
那么我会看到应该进入perl:
Feb 3 16:09:36 [user=someusername]
答案 0 :(得分:5)
awk
将默认缓冲输出。在fflush()
脚本中调用awk
或system("")
。
答案 1 :(得分:3)
当awk
连接到终端时,--line-buffered
执行无缓冲或线路缓冲,并在连接到终端以外的其他设备时执行块缓冲。这是非常标准的行为,这是您必须将grep
传递给awk
的原因。
您需要找到一种方法来禁用tail -f messages \
| perl -lne'BEGIN{$|=1} /auth failure:/ && print join " ", (split)[0,1,2,9]' \
| test3.pl
的缓冲。我不知道该怎么做,但我可以提供Perl替代方案。
{{1}}
另请参阅:File::Tail。
答案 2 :(得分:2)
来自管道的输入将位于 STDIN 中。是什么让你觉得它不存在?您可以使用
阅读它while (<>) {
print;
}
此外,您可以在一个简单的Perl程序中执行所有这些步骤。