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