在bash脚本中按行使用iperf3获取时间戳

Rem*_*jou 6 linux bash sed

我目前从iperf3获得此输出

2016-03-03 21:33:50 [  4]   0.00-1.00 sec   113 MBytes   950 Mbits/sec      
2016-03-03 21:33:50 [  4]   1.00-2.00 sec   112 MBytes   941 Mbits/sec    0     
2016-03-03 21:33:50 [  4]   2.00-3.00 sec   113 MBytes   944 Mbits/sec    0
Run Code Online (Sandbox Code Playgroud)

我想从这个数据创建图形,并且因为iperf3不能逐行更新时间戳(据我所知..)我正在寻找一种逐行递增输出文件的方法.

结果应该是这样的:

2016-03-03 21:33:50 [  4]   0.00-1.00 sec   113 MBytes   950 Mbits/sec      
2016-03-03 21:33:51 [  4]   1.00-2.00 sec   112 MBytes   941 Mbits/sec    0     
2016-03-03 21:33:52 [  4]   2.00-3.00 sec   113 MBytes   944 Mbits/sec    0
Run Code Online (Sandbox Code Playgroud)

因此必须在包含Mbits/sec的每一行上执行动作(+1),直到文件结束.

我猜sed和/或date命令可能会有用,循环可能很有用,但无法看到如何使用时间值构建它.

sim*_*eco 1

您可以使用sed来做到这一点,但这并不简单......使用perl来做到这一点要容易得多:

perl -lne 'print $1.($2 + ($.) - 1).$3 if /(.+)(50)(.+)/'  file.txt
Run Code Online (Sandbox Code Playgroud)
  • -l启用行结束处理,指定行结束符
  • -n假设循环程序
  • -e一行程序
  • print打印命令
  • .字符串连接
  • $number变量包含与捕获组匹配的字符串部分()
  • $. 当前记录数
  • ($2 + ($.) - 1)意思是: 50 + '当前记录数' - 1
  • if /(.+)(50)(.+)/'带有引用的正则表达式的语句print
  • file.txt包含您的数据的文件