提取ping时间和前缀时间戳

时间:2013-02-27 21:19:49

标签: bash sed awk ping

我试图以更加数据友好的格式提取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

第一个数字来自$(日期+%s),第二个数字来自ping命令的第8列。

我希望能够运行这个很长一段时间,并获得一个长的,两列的时间戳和ping时间列表。

时间戳 我有时间戳使用以下内容:

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

但是当我尝试添加sed,awk或切入管道以获得最终没有输出的时间时!

我对sed或awk不太熟悉,但我确信它们必须是适合这项工作的正确工具。我的尝试导致没有输出..我认为这是因为awk在将输出传递给下一个管道程序之前期待EOF?

谢谢!

3 个答案:

答案 0 :(得分:4)

使用

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

简短&高效,不是吗? =)没有缓冲问题......

注意:system("")可用作黑客以避免缓冲。

答案 1 :(得分: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'可以更快地查看结果并验证事情是否正常。

答案 2 :(得分: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;}'

结果:1​​362002815 7.52