Text-Processing
如何處理從tail -f到awk到jq的日誌文件?
我的案例如下:我有一個 Apache 日誌文件,我只記錄來自 PHP 的 json 數據。由於 Apache 列印日誌的方式,我必須使用 awk 修剪每一行的開頭和結尾。結果是一個 json 字元串,我想用 jq 漂亮地列印它。
要從尾部管道到 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"}
這將正確顯示,但如果 json 在 tail 執行時寫入,則不會顯示。
我剛剛找到了一個解決方案:您必須使用 stdbuf -oO 來“取消緩衝”每個命令。所以它應該是這樣的:
stdbuf -o0 tail -f -n 2 /var/log/apache2/error.log | stdbuf -o0 awk '{print substr($0,83, length($0)- 166); }' | jq