Voglio estrarre dal comando ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}'
il tempo medio.tempo medio estratto dal ping -c
107.921/108.929/110.394/0.905 ms
uscita dovrebbe essere: 108.929
Voglio estrarre dal comando ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}'
il tempo medio.tempo medio estratto dal ping -c
107.921/108.929/110.394/0.905 ms
uscita dovrebbe essere: 108.929
Un modo è quello di aggiungere solo un taglio a ciò che hai lì.
ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}' | cut -d '/' -f 2
ping -c 4 www.stackoverflow.com | tail -1| awk -F '/' '{print $5}'
funzionava correttamente.
L'opzione "-F" viene utilizzata per specificare il separatore di campo.
Questo potrebbe funzionare per voi:
ping -c 4 www.stackoverflow.com | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|'
La seguente soluzione utilizza solo Bash (richiede Bash 3):
[[ $(ping -q -c 4 www.example.com) =~ \ =\ [^/]*/([0-9]+\.[0-9]+).*ms ]] \
&& echo ${BASH_REMATCH[1]}
per l'espressione regolare è più facile da leggere (e gestire) se è memorizzato in una variabile:
regex='= [^/]*/([0-9]+\.[0-9]+).*ms'
[[ $(ping -q -c 4 www.example.com) =~ $regex ]] && echo ${BASH_REMATCH[1]}
Si potrebbe voler cambiare l'espressione regolare a '= [^ /] */([0-9.] +). * ms' per includere valori medi senza alcun decimali. – gsbabil
Promozione luissquall's very elegent comment a una risposta:
ping -c 4 www.stackoverflow.com | awk -F '/' 'END {print $5}'
estratto diretto tempo medio dal comando ping:
ping -w 4 -q www.duckduckgo.com | cut -d "/" -s -f5
Opzioni:
-w time out 4 seconds
-q quite mode
-d delimiter
-s skip line without delimiter
-f No. of field - depends on your system - sometimes 5th, sometimes 4th
ho personly uso è in questo modo:
if [ $(ping -w 2 -q www.duckduckgo.com | cut -d "/" -s -f4 | cut -d "." -f1) -lt 20 ]; then
echo "good response time"
else
echo "bad response time"
fi
thx, che ha fatto il trucco . Anche se mi sto chiedendo un modo migliore con meno tubi e, infine, con prestazioni migliori. – jack
@jack: dopo un minimo di quattro secondi per ottenere i dati effettivi, il piccolo overhead in questa pipeline probabilmente non avrà mai importanza. –