1

iperf在 LEDE OS 上运行了以下版本 2 的输出。我正在尝试解析输出以获取 Mbits/sec 之前的数字,这是 IPERF 会话的平均吞吐量。但是,似乎每列之间的分隔与一定数量的空格或制表符不匹配。另外,生成的CSV格式iperf会产生奇怪的结果,因此我不得不依赖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
4

3 回答 3

3

你可以用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)}'
于 2017-05-05T15:27:31.923 回答
0

如果这是 iperf 2,则尝试使用 -fb 进行位/字节格式化。这种格式更容易用正则表达式解析,因为它只是一个数字。手册页在这里

`一般选项

-f, --format [abkmgBKMG] 报告格式:自适应、位、字节、千位、兆位、千兆位、千字节、兆字节、千兆字节(更多信息请参见注释)`

于 2021-12-12T02:00:07.530 回答
0

你 cat 尝试使用 awk 工具:

iperf -c 10.0.0.7 -t 10 -i 0.1 -f m | awk -F 'MBytes' {'print $2'} 
于 2021-12-07T10:48:46.973 回答