19

いくつかのログファイルを監視するためのシェルスクリプトを作成しようとしています。私は次のようなコマンドを使用しています:

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

ログに追加されます。

問題を明確にしたいと思います。誰かが私がこれを解決するのを手伝ってくれる?ありがとうございました :)

4

1 に答える 1

25

この問題は、ほぼ確実に、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/を確認してください。

于 2013-01-16T15:40:31.910 に答える