特定の Web サイトからの ping が、pingoutput.txt
各 ping 応答を行ごとに区切って というテキスト ファイルに格納されているログ ファイルがあります。このテキスト ファイルから、その間の往復時間を抽出しtime=
、ms
別のテキスト ファイルまたはリストに格納して、最小から最大まで並べ替える必要があります。
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms
また、pingoutput.txt
ファイルは大きく、約 86,400 行あります。私は Linux 上のシェル スクリプトを使用してこれを実行しています。
答え1
これは私にとってはうまくいきます:
sed 's/.*time=\([0-9]*\) .*/\1/' times | sort -n > outfile
times
このファイルはどこにありますか:
cat times
64 bytes from onofri.org (67.222.36.105): icmp_req=1 ttl=47 time=202 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=2 ttl=47 time=206 ms
64 bytes from onofri.org (67.222.36.105): icmp_req=3 ttl=47 time=215 ms
そしてoutfile
次のようになります:
cat outfile
202
206
215
答え2
Perlの正規表現とgrepも使用できます
grep -oP '(?<=time\=).*' pingoutput
答え3
次のサンプル スクリプトを使用して時間を抽出できます。
awk -F\= '{print int($4)}' pingoutput.txt
=を区切り文字として使用し、int関数を使用して「202ms」文字列の数字のみを取得します。
出力を他のファイルにリダイレクトするには、次のコマンドを使用します。
awk -F\= '{print int($4)}' pingoutput.txt > times.txt
出力をソートするには、awkの出力をsortコマンドにパイプすることができます。
awk -F\= '{print int($4)}' pingoutput.txt |sort -n > times.txt
答え4
pcre
オプションがある場合はgrep
$ grep -oP 'time=\K\d+' pingout.txt
202
206
215
$ grep -oP 'time=\K\d+' pingout.txt | sort -n
202
206
215
$ grep -oP 'time=\K\d+' pingout.txt | sort -nr
215
206
202
time=\K
肯定的な後見文字列time=
- これは出力の一部ではありません\d+
1桁以上の数字。[^ ]+
スペース以外の文字の抽出にも使用できます。
出力をファイルに保存するには、>
リダイレクトを使用します。
$ grep -oP 'time=\K\d+' pingout.txt | sort -n > op.txt
$ cat op.txt
202
206
215