
Meu caso de uso é o seguinte: Eu tenho um arquivo de log do Apache onde estou registrando apenas dados json do PHP. Por causa de como o Apache está imprimindo os Logs, tenho que cortar o início e o final de cada linha com o awk. O resultado é uma string json que desejo imprimir com jq.
Para canalizar do tail para o awk, tenho que usar o stdbuf. O comando completo que criei é este:
stdbuf -o0 tail -f -n 1 /var/log/apache2/error.log | awk '{print substr($0,83, length($0)- 166); }' | jq
que não está funcionando. Acho que é por causa do jq, mas --stream ou --unbuffered também não está funcionando.
Alguém sabe como fazer o que eu quero?
EDITAR: Um exemplo de JSON seria apenas
{"foo": "bar"}
isso será exibido corretamente, mas se o json for escrito enquanto o tail estiver em execução, ele não será exibido.
Responder1
Acabei de encontrar uma solução: você precisa "desbloquear" cada comando com stdbuf -oO. Então deveria ficar assim:
stdbuf -o0 tail -f -n 2 /var/log/apache2/error.log | stdbuf -o0 awk '{print substr($0,83, length($0)- 166); }' | jq