我试图以更加数据友好的格式提取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?
谢谢!
答案 0 :(得分:4)
使用awk:
$ 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;}'
结果:1362002815 7.52