извлекать среднее время из ping -c - PullRequest
12 голосов
/ 09 марта 2012

Я хочу извлечь из команды ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}' среднее время.

107.921/108.929/110.394/0.905 ms

Вывод должен быть: 108.929

Ответы [ 6 ]

32 голосов
/ 09 марта 2012

Один из способов - просто добавить разрез к тому, что у вас есть.

ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}' | cut -d '/' -f 2
7 голосов
/ 09 марта 2012

ping -c 4 www.stackoverflow.com | tail -1| awk -F '/' '{print $5}' будет работать нормально.

Параметр "- F" используется для указания разделителя полей.

4 голосов
/ 09 марта 2012

Это может работать для вас:

ping -c 4 www.stackoverflow.com | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|'
3 голосов
/ 16 марта 2012

В следующем решении используется только Bash (требуется Bash 3):

[[ $(ping -q -c 4 www.example.com) =~ \ =\ [^/]*/([0-9]+\.[0-9]+).*ms ]] \
&& echo ${BASH_REMATCH[1]}

Для регулярного выражения легче читать (и обрабатывать), если оно хранится в переменной:

regex='= [^/]*/([0-9]+\.[0-9]+).*ms'
[[ $(ping -q -c 4 www.example.com) =~ $regex ]] && echo ${BASH_REMATCH[1]}
2 голосов
/ 14 сентября 2015

Повышение Очень изящный комментарий Луискуля к ответу:

 ping -c 4 www.stackoverflow.com | awk -F '/' 'END {print $5}'
0 голосов
/ 24 июля 2016

Среднее время извлечения из команды ping:

ping -w 4 -q www.duckduckgo.com  | cut -d "/" -s -f5

Параметры:

-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

Я лично использую вот так:

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
...