2017-05-05 106 views
1

我有以下在LEDE OS上运行的iperf版本2的输出。我正在试图解析输出以获得数字,这是IPERF会话的平均吞吐量Mbits/sec之前的数字。但是,似乎每列之间的分隔不符合特定数量的空格或制表符。另外,由iperf生成的CSV格式会产生奇怪的结果,因此我必须依赖iperf的常规输出。任何建议如何使用正则表达式或awk命令解析输出?解析非常规命令输出

iperf命令:

iperf -c 10.0.0.7 -t 10 -i 0.1 -f m 

输出:

[ 3] 0.00-10.00 sec 1889 MBytes 1584 Mbits/sec 15114/0   0  
2483K/3302 us 

回答

2

可以使用grep那些。

iperf -c 10.0.0.7 -t 10 -i 0.1 -f m | grep -o -E '\w+ Mbits/sec' 

或者更准确:

iperf -c 10.0.0.7 -t 10 -i 0.1 -f m | grep -o -E '[0-9]+ Mbits/sec' 

,仅保留数字,你可以使用另一个正则表达式,

iperf -c 10.0.0.7 -t 10 -i 0.1 -f m | grep -Po '[[:digit:]]+ *(?=Mbits/sec)' 

以上,[[:digit:]]+[0-9]+是相同的,一致的行中的数字。

对于MacOS X中的FreeBSD grep,-P将不起作用。直接使用perl

iperf -c 10.0.0.7 -t 10 -i 0.1 -f m | perl -nle 'print $& if m{\d+ *(?=Mbits/sec)}' 
+0

它可以工作,但它在输出中打印Mbits/sec。任何想法如何去除Mbits /秒? – IoT

+0

请参阅我的编辑.... – iamauser

+0

新命令有一个问题,它不起作用: '用法:grep [-HhnlLoqvsriwFE] [-m N] [-A/B/CN] PATTERN/-e PATTERN .../- f文件[文件] ...' – IoT