pingの結果を時間ごとにフィルタリングする方法は?

pingの結果を時間ごとにフィルタリングする方法は?

特定のミリ秒未満のpingをフィルタリングするにはどうすればよいですか?つまり、500ミリ秒より古いPing応答だけをテキストファイルにエコーさせることができますか?

IP=$1
SECONDS_Between_Pings=$2

ping -i $2 $1 | while read pong; do echo $(date) $pong; done >> ~/Downloads/pings_file_$(date +%Y-%m-%d).txt

答え1

grep拡張正規表現を使用してください。

ping ... | grep --line-buffered -E 'time=([0-9]{4}|[5-9][0-9]{2})' | ...

これは次の行と一致しますtime=

  • 4桁の数字(1000+ミリ秒)。
  • 5〜9の1桁の数字の後に、任意の2桁の数字(500〜999ms)が続きます。

--line-buffered解決するgrep基本出力バッファリングによる問題パイプラインチェーンに使用される場合。 grepがパイプラインチェーンの最後のリンクである場合は必要ありません。

答え2

Perlソリューション:

ping -i "$2" "$1" | while read pong; do echo $(date) "$pong" ; done \
  | perl -ne 'print if (/time=([0-9.]+)/)[0] > .5' >> ~/Downloads/...

説明: -([0-9.]+)次の10進数を一致させてtime=覚えてください。 - (...)[0] は与えられたリストの最初の要素を返します(リストからスカラーに切り替える必要があります)。

関連情報