gpt4 book ai didi

linux - Bash 脚本记录平均 ping 时间,一天每 20 秒一次

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:16 24 4
gpt4 key购买 nike

我目前正在尝试编写一个 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 -F'[ /]' 'NR~/^[123]$/; /^---/{ip=$2} /^rtt/{print ip, $8}' file
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

您没有告诉我们“100% 损失问题”您想要什么输出,所以我不知道您想用它做什么。只需将其包含在示例输入和预期输出中,除非有一些具体原因目前尚不清楚。

如果您想要的只是打印出 100% 损失的内容,您可以将脚本调整为:

awk -F'[ /]' 'NR~/^[123]$/; /^---/{ip=$2} /^rtt/{print ip, $8} /100% packet loss/{print ip, "100% packet loss"}' file

可能性是无限的...只需告诉我们您需要输出什么。

这是一次一行的注释:

awk -F'[ /]' '       # use space and / as the field separator
NR~/^[123]$/; # if youre on input line 1, 2, or 3, print that line (the default action)
/^---/{ip=$2} # if the line starts with 3 dashes, save the 2nd field as the IP address
/^rtt/{print ip, $8} # if the line starts with rtt, print the saved IP address and the 8th field which is the averages
/100% packet loss/{print ip, 2000} # if the line contains the 100%... statement, print the IP address and a default value of 2000
' file

关于linux - Bash 脚本记录平均 ping 时间,一天每 20 秒一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21637152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com