私のユースケースは次のとおりです。 PHPでjsonデータのみを記録するApacheログファイルがあります。 Apacheがログを印刷する方法のため、awkを使用して各行の開始と終了を切り捨てる必要があります。結果はjson文字列で、jqを使用してきれいに印刷したいと思います。
tailからawkにパイプするにはstdbufを使用する必要があります。私が思いついた完全なコマンドは次のとおりです。
stdbuf -o0 tail -f -n 1 /var/log/apache2/error.log | awk '{print substr($0,83, length($0)- 166); }' | jq
これはうまくいきません。私はそれがjqのためだと思いますが、--streamまたは--unbufferedも動作しません。
私がやりたいことをする方法を知っている人はいますか?
編集する: JSONの例は次のとおりです。
{"foo": "bar"}
これは正しく表示されますが、tailの実行中にjsonが作成されても表示されません。
答え1
私は解決策を見つけました。 stdbuf -oOを使用して各コマンドを「バッファ解除」する必要があります。したがって、次のようにする必要があります。
stdbuf -o0 tail -f -n 2 /var/log/apache2/error.log | stdbuf -o0 awk '{print substr($0,83, length($0)- 166); }' | jq