bash - examples - man cut linux
cola-f en grep en corte no funciona correctamente (1)
Estoy tratando de construir un script de shell para monitorear algunos archivos de registro. Estoy usando un comando como este:
tail -f /var/somelog | grep --line-buffered " some test and p l a c e h o l d e r" | cut -f 3,4,14 -d " "
el archivo de registro es como
some test and p l a c e h o l d e r 3
some test and p l a c e h o l d e r 4
some test and p l a c e h o l d e r 5
some test and p l a c e h o l d e r 6
y así sucesivamente .. Mi problema es que la salida del comando no muestra la última línea
some test and p l a c e h o l d e r 6
hasta la linea
some test and p l a c e h o l d e r 7
Se agrega al registro.
Espero haber aclarado mi problema. Alguien puede ayudarme a resolver esto? Gracias :)
el problema está casi seguramente relacionado con la forma en que grep y cut amortiguan su salida. Aquí hay un truco que debería solucionar el problema, aunque estoy seguro de que hay formas más bonitas de hacerlo:
tail -f /var/somelog | while read line; do echo "$line" | grep "some test and p l a c e h o l d e r" | cut -f 3,4,14 -d " "; done
(no olvides el ; done
al final del comando)
alternativamente, debido a que gawk
no almacena su salida, puede usarlo en lugar de cut
para evitar el incómodo bucle while:
tail -f log | grep --line-buffered "some test and p l a c e h o l d e r" | gawk ''{print $3,$4,$14}''
visite http://www.pixelbeat.org/programming/stdio_buffering/ para obtener más información sobre los problemas de almacenamiento en búfer.