
私のユースケースは次のとおりです。PHP からの json データのみをログに記録する Apache ログファイルがあります。Apache がログを出力する方法のため、awk を使用して各行の先頭と末尾をトリミングする必要があります。結果は jq を使用してきれいに出力したい json 文字列です。
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