¿Cómo procesar un archivo de registro desde tail -f a awk a jq?

¿Cómo procesar un archivo de registro desde tail -f a awk a jq?

Mi caso de uso es el siguiente: Tengo un archivo de registro de Apache donde solo registro datos json desde PHP. Debido a cómo Apache imprime los registros, tengo que recortar el inicio y el final de cada línea con awk. El resultado es una cadena json que quiero imprimir con jq.

Para canalizar desde tail a awk tengo que usar stdbuf. El comando completo que se me ocurrió es este:

stdbuf -o0 tail -f  -n 1 /var/log/apache2/error.log | awk '{print substr($0,83, length($0)- 166); }' | jq 

que no está funcionando. Creo que es por jq, pero --stream o --unbuffered tampoco funcionan.

¿Alguien sabe cómo hacer lo que quiero?

EDITAR: Un ejemplo de JSON sería simplemente

{"foo": "bar"}

esto se mostrará correctamente, pero si el json se escribe mientras se ejecuta tail, no se muestra.

Respuesta1

Acabo de encontrar una solución: tienes que "descomprimir" cada comando con stdbuf -oO. Entonces debería verse así:

stdbuf -o0 tail -f  -n 2 /var/log/apache2/error.log | stdbuf -o0 awk '{print substr($0,83, length($0)- 166); }' | jq

información relacionada