1

我喜欢运行 ping,它只在通过阈值时打印输出。
如果传递这个值,还要在输出中添加日期。

这是我尝试过的:

ping 8.8.8.8 | awk '{split($7,a,"[=.]");if (a[2]>58) print a[2],d}' d="$(date)"
ping 8.8.8.8 | awk '{"date"| getline date;split($7,a,"[=.]");if (a[2]>58) print a[2],date}' 

这两个问题都date没有更新。全部以相同的日期打印。

59 Fri Nov 15 08:55:04 CET 2013
59 Fri Nov 15 08:55:04 CET 2013
59 Fri Nov 15 08:55:04 CET 2013
60 Fri Nov 15 08:55:04 CET 2013
59 Fri Nov 15 08:55:04 CET 2013

我知道这可以使用 bash 脚本来解决,但我只是想在测试线路 ping 时间时使用一个简单的命令行。

4

2 回答 2

4

以下对我有用。我正在使用 OSX Mavericks:

ping 8.8.8.8 | awk -F"[= ]" '{if($10>50) {cmd="date"; cmd | getline dt; close(cmd) ; print $10, dt}}'

这将输出 ping 线路的时间 > 50 ms。

我得到这个示例输出:

51.352 Fri Nov 15 00:33:40 PST 2013
50.519 Fri Nov 15 00:33:42 PST 2013
52.407 Fri Nov 15 00:33:44 PST 2013
50.904 Fri Nov 15 00:33:50 PST 2013
52.864 Fri Nov 15 00:33:54 PST 2013
于 2013-11-15T08:11:53.140 回答
2

当你说:

ping 8.8.8.8 | awk '{split($7,a,"[=.]");if (a[2]>58) print a[2],d}' d="$(date)"

该变量d仅被评估一次,因此您会在输出中的所有行中附加相同的时间戳。您可以改为使用strftime以下参数print

ping 8.8.8.8 | awk '{split($7,a,"[=.]");if (a[2]>58) print a[2], strftime()}'
于 2013-11-15T08:43:03.980 回答