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

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

特定のWebサイトのpingを含むログファイルがあり、テキストファイルはpingoutput.txt各ping応答が1行に分かれて呼び出されます。このテキストファイルからそれらの間の往復時間を抽出し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も約86400行になります。私は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関数を使用して "202 ms"文字列の数だけを取得します。

出力を別のファイルにリダイレクトするには、次のコマンドを使用します。

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

関連情報