2014-02-07 91 views
-1

我目前正在尝试编写一个bash脚本来记录atm的平均ping时间。三个不同的目标,每20秒一整天。 这是我目前有..Bash脚本记录平均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的平总结刚刚保存目标和平均时间?
  • 以及我如何处理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%的损失问题..输出是这样的

平-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 

现在,这里是没有汇总行与成功的人平,所以我不能使用SED/AWK该模式..

+2

你尝试过什么了吗?它如何失败?你学习了什么awk?我们不是“免费解决所有我的问题”社区。 –

+2

如果您需要sed或awk脚本,您至少需要为该脚本提供一些样本输入和预期输出。例如,如果你想分析'ping -c 3 -q -W 2 '的输出,那么你需要发布'ping -c 3 -q -W 2 '的样本输出,因为这将是样本输入您的sed或awk脚本,然后您需要发布您希望sed或awk脚本从该示例输入中生成的输出。 –

+0

您不需要在SO上签署您的问题,我们已经可以看到您的用户名。 – Nit

回答

1

鉴于你贴样本输入文件:

$ 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%的损失概率lem“,所以我不知道你想要做什么。只要将它包含在你的样本输入和预期输出中,除非有一些不明确的特定原因。

如果你想要的是什么,说明印刷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 
+1

非常感谢你,会试着去了解awk命令的一步一步做什么。我没有100%损失案例的解决方案,现在我只保存2000毫秒这些案例的平均时间。 – apoc

+0

我添加了一个版本,其中每个条件+动作与注释分开,因此更容易理解。我也将打印为100%损失的情况下打印2000. –

+1

完美,非常感谢您的广泛的答案! – apoc