2014-03-05 32 views
1

我知道這已經被問過,我已經看了看以前的帖子,但似乎並沒有得到什麼,我試圖做的工作。另一種解析bash腳本輸出變量

我知道這是很基本的,所以我希望這將是很容易讓大多數人對SO。

我想創建坪地址一個簡單的bash腳本,然後插入平輸出到CSV文件(或者更確切地說,到一個文件中,以逗號分隔)。

ping命令是

ping -D google.com 

和輸出看起來像

PING google.com (74.125.239.103) 56(84) bytes of data. 
[1393992465.052723] 64 bytes from nuq05s01-in-f7.1e100.net (74.125.239.103): icmp_req=1 ttl=55 time=2.66 ms 

我想插入劃時代的時間,TTL和時間到一個文件中,以逗號分隔。 如果它很容易,那麼它不會傷害轉換爲信號出現時間日期也行,不過這可能是我在這個簡單的項目下一步。

我想通了,命令信號出現時間轉換爲人類格式

date -d @[epoch_time] 

側瑣事 - 爲什麼我需要@?

+0

邊瑣細答案:這是寫'日期'的人決定識別一個紀元時間的方式。你現在也可以傳遞'date -d'+ 21天'等參數。 –

+1

的'@'避免了劃時代偏移的模糊性在8月份1970年 – rici

回答

1
ping -D google.com | sed -n -e 2p -e 2q | 
while read epoch b64 bytes from host ip icmp ttl time ms 
do 
    date=$(date -d @$(sed 's/[][]//g' <<< "$epoch")) 
    ttl=$(sed 's/ttl=//' <<< "$ttl") 
    time=$(sed 's/time=//' <<< "$time") 
    echo "$date,$ttl,$time" 
done >> file.csv 

顯然,您可以通過調整第一個sed命令來擴展您分析的行數。你也許可以做編輯,${var/x/y}符號內環路,但我不認爲這樣做的直到我在最後寫了,因爲我已經花了更長的貝殼工作,其中,這不是比我有一個選項與bash。你確定你不想要主機或IP地址信息嗎?


在冷光上午,有提高代碼的簡單方法:

ping -D google.com | sed -n -e 2p -e 2q | 
while read epoch b64 bytes from host ip icmp ttl time ms 
do 
    epoch=${epoch#[} 
    epoch=${epoch%]} 
    date=$(date -d @${epoch}) 
    echo "$date,${ttl#ttl=},${time#time=}" 
done >> file.csv 

這是你是否建立了date變量選擇的問題,或者乾脆直接嵌入$(date -d @${epoch})echo論據。

+0

由於下半年這麼多的特定日期!我無法弄清楚如何使用sed,awk或grep,但我知道每個都可以完成。 我不需要主機信息,它只是用來監控我們的網絡。再次感謝! – chopsuei3

+0

太多的''sed''命令和子殼。 –