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 

2013/01/23

理想的には、これまでのところすべてを 1 行で実行したいのですが、

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、速度を数値と単位値に分割していません。たった1本の弦です。

速い速度は より大きいので、文字で分割することで速度を無視して抽出5 M/sできます。次に、速度を取得して比較できますK/sM$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 に答える