GNU/Linux >> Tutoriales Linux >  >> Linux

¿Procesar cada línea de salida de `ping` inmediatamente en Pipeline?

Tengo algunos ejemplos de diferentes formas de extraer información de tiempo de ping -c 10 google.com . Para algunas de estas canalizaciones, se produce una línea de salida de vez en cuando, al igual que la salida de ping. Para otros, las líneas de salida se emiten todas a la vez después de que se hayan procesado todas. ¿Existe una buena regla sobre cuándo veré el primer comportamiento y cuándo veré el segundo?

# prints output for each line as soon as it is received
# on OS X and Linux.
ping -c 10 google.com | grep -o 'time=S*'

# prints output for each line as soon as it is received on OS X
# but not on Linux 
# (the output of ping is slightly different so it's $8 on Linux to get the time)
ping -c 10 google.com | awk '{ print $7 }'

# waits until all input is received on OS X and Linux
ping -c 10 google.com | awk -F ':' '{ print $2 }'

# prints output for line as soon as it is received on Linux and OS X
ping -c 10 google.com | sed -e 's/^.*time=(.*) .*$/1/'

# waits for the end of input on OS X and Linux
ping -c 10 google.com | grep -o 'timeS*' | sed -e 's/time=//'

# as a quick check, this prints each line of output immediately 
# on OS X and Linux
ping -c 10 google.com | sed -e 's/time=//' 

Después de mirar un poco, esto parece ser solo un problema de almacenamiento en búfer de línea y algunas de las utilidades estándar se comportan de manera diferente cuando se usan de forma interactiva y no interactiva.

Respuesta aceptada:

Se trata de cómo se maneja el almacenamiento en búfer con esos programas.

Si desea que grep genere datos canalizados inmediatamente, utilícelo con la opción –line-buffered.

ping -c 10 google.com | grep --line-buffered -o 'timeS*' | sed -e 's/time=//'

Si desea que awk genere datos canalizados de inmediato, puede usar la opción -W interactivo.

ping -c 10 google.com | awk -W interactive '{ print $7 }'

Debe leer las páginas man de esas aplicaciones para obtener más información.


Linux
  1. La salida de Ls tiene saltos de línea pero se muestra en una sola línea. ¿Por qué?

  2. ¿Cómo saber en qué versión de Os X estoy desde la línea de comandos?

  3. Daemontools Multilog pierde información de tiempo de línea de registro. ¿Como arreglarlo?

  4. ¿Cuál es el significado de cada línea de la salida del ensamblado de un mundo C hello?

  5. Ejecutar script PHP desde la línea de comando como proceso en segundo plano

¿Colorear la salida de los sensores?

Iterando sobre cada línea de salida ls -l

En un shell de Linux, ¿cómo puedo procesar cada línea de una cadena de varias líneas?

Omitir la primera línea de cualquier salida de comando de Linux

¿Cómo contar el número de pestañas en cada línea usando el script de shell?

Línea de comando:Extraer subcadena de la salida