3

よりデータに適した形式でping時間を抽出しようとしています。私の目標は、次のようなものを変えることです。

64 bytes from arn06s02-in-f0.1e100.net (173.194.32.32): icmp_seq=59 ttl=54 time=31.8 ms

次のようなものに:

1361999357 31.8

ここで、最初の数値は$(date +%s)からのもので、2番目の数値はpingコマンドの8番目の列です。

これを長時間実行して、タイムスタンプとping時間の2列の長いリストを取得できるようにしたいと思います。

タイムスタンプタイム スタンプは次のように機能します。

ping google.com | while read line; do echo "$(date +%s) $line"; done

しかし、sed、awk、またはcutをパイプラインに追加して、出力がない状態になる時間を取得しようとすると、

私はsedやawkにあまり詳しくありませんが、それらが仕事に適したツールであるに違いないと確信しています。私の試みでは出力がありませんでした。awkが出力を次のパイププログラムに渡す前にEOFを期待しているためだと思いますか?

ありがとう!

4

3 に答える 3

4

使用:

$ ping google.com | awk -F'[ =]' 'NR>1{print system("echo -n $(date +%s)"), $11}'

短くて効率的ですよね?=)そしてバッファリングの問題は発生しません...

注:system("")バッファリングを回避するためのハックとして使用できます。

于 2013-02-27T21:39:17.830 に答える
1

これを試して:

ping -c 1 google.com | grep "bytes from" | while read line; do echo "$(date +%s) $line"; done | awk '{print $1 " " $8}' | sed 's,time=,,'

'-c'を省略した場合、出力を取得する前に一定量のバッファリングが発生することに注意してください。'-c'を残すと、結果をよりすばやく確認し、機能していることを確認できます。

于 2013-02-27T21:27:12.257 に答える
1

ただ違う...

( date '+%s' ; ping -c 1 google.com; ) | sed -ne '/^[0-9][0-9]*$/h;/ bytes from /{s/^.*time=\([0-9.]*\).*/ \1/;H;g;s/\n//;p;}'

結果:1362002815 7.52

于 2013-02-27T22:09:27.650 に答える