1

我正在使用以下内容输出上传速度测试的结果

wput 10MB.zip ftp://user:pass@host 2>&1 | grep '\([0-9.]\+[KM]/s\)'

返回

18:14:38 (10MB.zip) - '10.49M/s' [10485760]
Transfered 10,485,760 bytes in 1 file at 10.23M/s

我想让结果10.23M/s(即速度)得到回应,并得到一个比较结果:

if speed=>5 MB/s then echo "pass" else echo "fail"

因此,最终输出将是:

PASS 7 M/s 

23/01/2013

理想情况下,到目前为止,我希望这一切都在一条线上完成

wput 100M.bin ftp://test:test@0.0.0.0 2>&1 | grep -o '\([0-9.]\+[KM]/s\)$' | awk ' { if (($1 > 5) && ($2 == "M/s")) { printf("FAST %s\n ", $0); }}'

但是如果我删除它不会输出任何东西

&& ($2 == "M/s"))

它可以工作,但我显然希望它的输出高于 5M/s,而且如果它超过 1K/s,它仍然会快速回显。有人可以告诉我我错过了什么。

4

3 回答 3

2

使用awk

# Over 5M/s
$ cat pass
18:14:38 (10MB.zip) - '10.49M/s' [10485760]
Transfered 10,485,760 bytes in 1 file at 10.23M/s

$ awk 'END{f="FAIL "$NF;p="PASS "$NF;if($NF~/K\/s/){print f;exit};gsub(/M\/s/,"");print(int($NF)>5?p:f)}' pass
PASS 10.23M/s

# Under 5M/s
$ cat fail
18:14:38 (10MB.zip) - '3.49M/s' [10485760]
Transfered 10,485,760 bytes in 1 file at 3.23M/s 

$ awk 'END{f="FAIL "$NF;p="PASS "$NF;if($NF~/K\/s/){print f;exit};gsub(/M\/s/,"");print(int($NF)>5?p:f)}' fail
FAIL 3.23M/s

# Also Handle K/s 
$ cat slow
18:14:38 (10MB.zip) - '3.49M/s' [10485760]
Transfered 10,485,760 bytes in 1 file at 8.23K/s

$ awk 'END{f="FAIL "$NF;p="PASS "$NF;if($NF~/K\/s/){print f;exit};gsub(/M\/s/,"");print(int($NF)>5?p:f)}' slow

FAIL 8.23K/s

不知道你从哪里来7 M/s

于 2013-01-22T14:37:36.277 回答
1

根据@Rubens,您可以使用grep -o正则表达式来显示速度,只需附加$到行尾

wput 10MB.zip ftp://user:pass@host 2>&1 | grep -o '\([0-9.]\+[KM]/s\)$'

有了perl你就可以轻松做剩下的事情

use strict;
use warnings;

while (<>) {
    if (m!\s+((\d+\.\d+)([KM])/s)$!) {
        if ($2 > 5 && $3 eq 'M') {
            print "PASS $1\n";
        } else {
            print "FAIL $1\n";
        }
    }
}

然后调用它

wput 10MB.zip ftp://user:pass@host 2>&1 | perl script.pl
于 2013-01-22T14:32:19.270 回答
0

这是问题更新的答案。

使用该awk程序,您没有将速度拆分为数字和单位值。它只是一个字符串。

因为快的速度大于5 M/s,你可以忽略K/s并通过在字符处分割来提取速度M。然后你有速度$1并且可以比较它

wput 100M.bin ftp://test:test@0.0.0.0 2>&1 | grep -o '[0-9.]\+M/s$' | awk -F '/M/' '{ if ($1 > 5) { printf("FAST %s\n ", $0); }}'
于 2013-01-23T17:35:31.270 回答