テキスト ファイルから ping 時間を抽出して別のテキスト ファイル/リストに並べ替える方法

テキスト ファイルから ping 時間を抽出して別のテキスト ファイル/リストに並べ替える方法

特定の 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

関連情報