web-dev-qa-db-ja.com

ping-cから平均時間を抽出します

コマンドから抽出したいping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}'平均時間。

107.921/108.929/110.394/0.905 ms

出力は次のようになります:108.929

13
creativeDev

1つの方法は、そこにあるものにカットを追加することです。

ping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}' | cut -d '/' -f 2
36
Buggabill

ping -c 4 www.stackoverflow.com | tail -1| awk -F '/' '{print $5}'は正常に機能します。

「-F」オプションは、フィールド区切り文字を指定するために使用されます。

7
raj

これはあなたのために働くかもしれません:

ping -c 4 www.stackoverflow.com | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|'
4
potong

次のソリューションは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]}
3
xebeche

宣伝 ルイススコールの非常にエレガントなコメント 答えに:

 ping -c 4 www.stackoverflow.com | awk -F '/' 'END {print $5}'
2
msanford

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
1
xerostomus

これらを使用して、現在のpingを単一の番号として取得します。

123.456:ping -w1 -c1 8.8.8.8 | tail -1| cut -d '=' -f 2 | cut -d '/' -f 2

123:ping -w1 -c1 8.8.8.8 | tail -1| cut -d '=' -f 2 | cut -d '/' -f 2 | cut -d '.' -f 1

これは、1つのpingの平均のみを表示することに注意してください(-c1)、この数を増やすことでサンプルサイズを増やすことができます(つまり、-c1337

これにより、bashエイリアスでNiceを再生しないawk(@Buggabillの投稿など)の使用が回避され、ナノ秒長くかかります

0
allanlaal