2016-09-22 52 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