コマンドから抽出したいping -c 4 www.stackoverflow.com | tail -1| awk '{print $4}'
平均時間。
107.921/108.929/110.394/0.905 ms
出力は次のようになります:108.929
1つの方法は、そこにあるものにカットを追加することです。
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}'
は正常に機能します。
「-F」オプションは、フィールド区切り文字を指定するために使用されます。
これはあなたのために働くかもしれません:
ping -c 4 www.stackoverflow.com | sed '$!d;s|.*/\([0-9.]*\)/.*|\1|'
次のソリューションは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]}
宣伝 ルイススコールの非常にエレガントなコメント 答えに:
ping -c 4 www.stackoverflow.com | awk -F '/' 'END {print $5}'
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
これらを使用して、現在の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の投稿など)の使用が回避され、ナノ秒長くかかります