Ayuda con el comando awk, tail y getline...... porfa que ya llevo como una semana..

Forums: 

cOMO estan colegas ;) recurro a ustedes ya que en estas dos semanas he estado tratando de leer y procesar las lineas de un log (nagios.log), para ello hice uso del comando awk, tail y getline:


awk 'BEGIN {"tail -f nagios.log" | getline; print $5}' > salida

El problema es que no me esta redireccionando el resultado de print $5 al archivo salida.

pero si yo realizo lo siguiente:


awk 'BEGIN {"tail -n 5 nagios.log" | getline; print $5}' > salida

BINGO.!!! si funciona. :)

:( pero lo que yo necesito es que procesar continuamente la salida del log nagios.log mediante tail -f nagios.log y que esto se me vaya almacenando en el archivo salida

PORFA ALGUIEN ME PODRIA AYUDAR, no se en que estoy fallando o que me falta, cualquier sugerencia es muy bien acogida....

porfa ya estoy empezando a desesperarme

Hola amigo primeramente

Imagen de edisonjavier85

Hola amigo primeramente gracias por tu interes a mi pregunta, pues la verdad acabo de probar la sugerencia que me diste.
pero tengo el mismo problema, no se esta redireccionando la salia al archivo salida.

A lo que mando a ejecutar la siguiente linea desde el shell:


tail -f nagios.log | awk '{print $5}' | tee salida

sucede que el archivo salida se genera, pero al abrirlo este se encuentra vacio.

La verdad esto como que ya me tiene cabezon...
estoy pensando que el problema puede ser debido al comando tail -f ya que este se encuentra ejecutando continuamente.

Estado leyendo algunos manuales, y por alli encontre que se podia usar el comando getline para procesar la linea actual, pero de igual manera la probe, pero sigo teniendo el mismo problema.
e aqui el codigo que use:


awk 'BEGIN {"tail -f nagios.log" | getline; print $5}' > salida

Espero que ustedes puedan darme una manita de gato o ayudarme con alguna otra idea, todo sera muy bien acogido.....

edisonjavier85

Creo que tienes problemas de flushing

Estimado, creo que tienes problemas de flushing.

Probé "tail -f /xxxx/xxx.log | awk '{print $5}'>salida". Le hice tail -f a salida y se ve que se escribe. Ahora, mi xxx.log crece a razón de 1.2 GB por hora, por lo que el flushing se hace rápido. Supongo que tu log no crece muy rápidamente. Investigando vi que podrías forzar el flushing en AWK, pero la eficiencia de esto queda a tu criterio.
Forzando el flushing quedaría así:
tail -f /xxxx/xxx.log | awk '{print $5;fflush("")}' >salida.
Saludos

Hola amigo, le agradezco

Imagen de edisonjavier85

Hola amigo, :) le agradezco mucho por su valioso aporte, pues lo probe y si tengo datos en el archivo de salida "salida", ahora el log con el cual estoy trabajando es el de nagios.log, no se si tu hayas trabajado anteriormente con esta herramienta de monitoreo de servicios??. En fin Muy agradecido por su ayuda estimado amigo,,, :D

edisonjavier85