2016-09-22 85 views
0

我得到這樣的輸出:擊:增加每列n秒

0.000 
0.002 
0.000 
0.002 
0.000 
0.026 
===== 
0.026 

注意,最後一行(0.026)是怎麼階段的結束時間之前。 我會重複該命令每隔N秒,我想下一次輸出寫入到下一列,如:

0.000 0.000 
0.002 0.001 
0.000 0.000 
0.002 0.001 
0.000 0.000 
0.026 0.027 
===== ===== 
0.026 0.028 

我知道有一些sed -i將解決我的問題,但我只是無法得到它的工作。由於在這個值上具有完全相同的時間戳非常重要,所以我不能執行下一個命令,然後將結果寫入其位置。

這給了我這些值的命令是:

curl -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null -s http://linux.com/ 
+0

你,所以你要每隔N秒向該文件添加一個新列? – anubhava

回答

0

殼牌線項目的工作 - 你可以移回的最新的行的開始和通過打印回車改寫它在bash(\r ,例如echo -en "print this \roverwrite with this"),但是你不能在最近的一行之前執行該操作。

您將無法直接獲取終端輸出的多行更新。

你最好的選擇是編寫一些輔助程序(可能比bash腳本更容易編寫它),它需要兩個文件並將每行從第二行附加到第一行的匹配行。然後,將每個新列保存到一個臨時文件,然後運行該附加程序給定一些基本文件(從空開始)和新臨時文件,每次保存一個新列。將它們一起摺疊起來,然後查看最終的文件。

+0

請注意,上面的答案可以用while循環封裝,底部用「sleep」,它可以繼續無限地向數據添加列。這是shell/util腳本的強大功能('paste'使這更容易)。同意在某些時候,O.P.將不得不將循環文件移出循環並進行更多處理,但要比編寫自定義程序(恕我直言)容易得多。祝你們好運。 – shellter

1

使用paste和命令替換,你可以並排存儲在任何文件上一次的輸出添加新柱側:

paste -d '\t' prevfile.out <(                  
curl -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n=====================\nTotal time:\t%{time_total}\n' -o /dev/null -s http://linux.com/ 
) 

這會產生這樣的輸出:

Lookup time: 0.005 Lookup time: 1.528 
Connect time: 0.387 Connect time: 1.788 
PreXfer time: 0.387 PreXfer time: 1.788 
StartXfer time: 0.797 StartXfer time: 2.059 
===================== ===================== 
Total time: 0.797 Total time: 2.059