特定のミリ秒未満の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] は与えられたリストの最初の要素を返します(リストからスカラーに切り替える必要があります)。