解析非常规命令输出
Parsing a non-regular command output
我在 LEDE OS 上有 iperf
版本 2 运行 的以下输出。我正在尝试解析输出以获取 Mbits/sec 之前的数字,这是 IPERF 会话的平均吞吐量。但是,似乎每列之间的分隔与一定数量的空格或制表符不匹配。另外,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
你可以使用 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)}'
你猫试试用awk工具:
iperf -c 10.0.0.7 -t 10 -i 0.1 -f m | awk -F 'MBytes' {'print '}
如果这是 iperf 2,则尝试 -fb 进行 bit/byte 格式化。这种格式更容易解析 w/regular 表达式,因为它只是一个数字。 Man page is here.
`常规选项
-f, --format [abkmgBKMG]
要报告的格式:自适应、位、字节、千位、兆位、千兆位、千字节、兆字节、千字节(更多信息请参见注释)`
我在 LEDE OS 上有 iperf
版本 2 运行 的以下输出。我正在尝试解析输出以获取 Mbits/sec 之前的数字,这是 IPERF 会话的平均吞吐量。但是,似乎每列之间的分隔与一定数量的空格或制表符不匹配。另外,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
你可以使用 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)}'
你猫试试用awk工具:
iperf -c 10.0.0.7 -t 10 -i 0.1 -f m | awk -F 'MBytes' {'print '}
如果这是 iperf 2,则尝试 -fb 进行 bit/byte 格式化。这种格式更容易解析 w/regular 表达式,因为它只是一个数字。 Man page is here.
`常规选项
-f, --format [abkmgBKMG] 要报告的格式:自适应、位、字节、千位、兆位、千兆位、千字节、兆字节、千字节(更多信息请参见注释)`