【发布时间】:2014-02-08 23:48:27
【问题描述】:
我目前正在尝试编写一个 bash 脚本来记录 atm 的平均 ping 时间。三个不同的目标,每 20 秒一整天。 这是我目前拥有的..
#!/bin/bash
echo "SCRIPT STARTED" >> pingthing.log
date +%d.%m.%y' '%R:%S >> pingthing.log
for i in $(seq 1 4320);
do
date +%d.%m.%y' '%R:%S >> pingthing.log
#save just target IP and avg time.
ping -c 3 -q -W 2 8.8.8.8 >> pingthing.log
ping -c 3 -q -W 2 64.25.40.16 >> pingthing.log
ping -c 3 -q -W 2 96.17.199.48 >> pingthing.log
sleep 20
done
echo "SCRIPT ENDED" >> pingthing.log
date +%d.%m.%y' '%R:%S >> pingthing.log
现在我的问题...
- 如何 sed/awk ping 摘要以仅保存目标和平均时间?
- 我该如何处理 100% 损失的情况?
编辑:抱歉,我没有使用 sed/awk 的经验,但知道可以使用这些工具来完成。让我试着澄清一下自己
这是当前保存在我的日志文件中的内容.. 但这仅显示了它的开头
SCRIPT STARTED
07.02.14 22:14:13
07.02.14 22:14:13
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 127.773/152.321/192.204/28.452 ms
PING 64.25.40.16 (64.25.40.16) 56(84) bytes of data.
--- 64.25.40.16 ping statistics ---
3 packets transmitted, 3 received, +2 duplicates, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 213.889/237.182/286.825/26.656 ms
PING 96.17.199.48 (96.17.199.48) 56(84) bytes of data.
--- 96.17.199.48 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 305.028/340.081/375.135/35.058 ms
现在我只想拥有目标及其平均值。 ping 命令的时间如
SCRIPT STARTED
07.02.14 22:14:13
07.02.14 22:14:13
8.8.8.8 152.321
64.25.40.16 237.182
96.17.199.48 340.081
我知道我应该将 ping 命令通过管道传递给 sed/awk,但由于我没有这方面的经验,所以我暂时将其省略了。
我不想让你解决所有问题,我是来讨论和学习的。 对于 100% 损失问题.. 输出看起来像这样
ping -W 2 -q -c 3 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
--- 1.1.1.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2016ms
现在这里没有成功 ping 的总结行,所以我不能对那个模式使用 sed/awk..
【问题讨论】:
-
您尝试过什么?它是如何失败的?你从 awk 中学到了什么?我们不是一个“免费解决我所有问题”的社区。span>
-
如果您想要一个 sed 或 awk 脚本,您至少需要为该脚本提供一些示例输入和预期输出。例如,如果您希望它解析
ping -c 3 -q -W 2 <IP>的输出,那么您需要发布一些ping -c 3 -q -W 2 <IP>的示例输出,因为这将是您的 sed 或 awk 脚本的示例输入,然后您需要发布您想要的输出就像您的 sed 或 awk 脚本从该示例输入中生成一样。 -
您无需在 SO 上签署您的问题,我们已经可以看到您的用户名。
-
不要将每个输出行重定向到 pingthing.log ——而是在您调用它时重定向整个脚本输出。然后你可以通过 sed 或 awk 管道
ping命令:ping -c 3 -q -W 2 8.8.8.8 | sed -e '<something>'