2014-02-07 142 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