
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