
¿Cómo puedo quitar el tiempo de un retorno de ping? Por ejemplo:
64 bytes from 10.3.0.1: icmp_seq=0 ttl=63 time=2.610 ms
Quiero tomar el valor después time=
y pasarlo a una prueba como:
if time>=50.0; then do_something; fi
Respuesta1
Entonces, si quisieras obtener solo el time
valor sin la ms
etiqueta:
HOST="127.0.0.1"
PING_MS=`ping -c1 "$HOST" | /usr/bin/awk 'BEGIN { FS="=" } /time=/{gsub(/ ms/, ""); print $NF; exit}'`
Esto me da:
0.058
Ahora, si quisiéramos probar if time>=50.0
, también podríamos usar awk
para esto, ya que POSIX sh
no puede comparar números decimales:
if echo $PING_MS | awk '{exit $1>=50.0?0:1}'; then
echo "Ping time is >= 50.0ms."
fi
Podrías acortarlo a:
if ping -c1 "$HOST" | /usr/bin/awk 'BEGIN { FS="=" } /time=/{gsub(/ ms/, ""); exit $NF>=50.0?0:1}'; then
echo "Ping time is >= 50.0ms."
fi
FS
es el separador de campos y $NF
siempre es el último campo. $NF>=50.0?0:1
saldrá con un código de salida exitoso si el último campo es >=50.0
; o un código de salida de error si no. /time=/
coincide sólo con líneas que contienen time=
. gsub(/ ms/, "");
se retira " ms"
de la cuerda.