如何从wget输出grep下载速度?

时间:2010-10-11 19:01:05

标签: linux command-line grep wget

我需要使用wget下载多个文件并测量下载速度。

e.g。我用

下载
wget -O /dev/null http://ftp.bit.nl/pub/OpenBSD/4.7/i386/floppy47.fs http://ftp.bit.nl/pub/OpenBSD/4.7/i386/floppyB47.fs

,输出

--2010-10-11 18:56:00--  http://ftp.bit.nl/pub/OpenBSD/4.7/i386/floppy47.fs
Resolving ftp.bit.nl... 213.136.12.213, 2001:7b8:3:37:20e:cff:fe4d:69ac
Connecting to ftp.bit.nl|213.136.12.213|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1474560 (1.4M) [text/plain]
Saving to: `/dev/null'

100%[==============================================================>] 1,474,560    481K/s   in 3.0s

2010-10-11 18:56:03 (481 KB/s) - `/dev/null' saved [1474560/1474560]

--2010-10-11 18:56:03--  http://ftp.bit.nl/pub/OpenBSD/4.7/i386/floppyB47.fs
Reusing existing connection to ftp.bit.nl:80.
HTTP request sent, awaiting response... 200 OK
Length: 1474560 (1.4M) [text/plain]
Saving to: `/dev/null'

100%[==============================================================>] 1,474,560    499K/s   in 2.9s

2010-10-11 18:56:06 (499 KB/s) - `/dev/null' saved [1474560/1474560]

FINISHED --2010-10-11 18:56:06--
Downloaded: 2 files, 2.8M in 5.9s (490 KB/s)

我需要grep总下载速度,即字符串490 KB/s。 我该怎么做?

P.S。可能需要说明我们实际上只下载一个文件的情况,因此不会有以FINISHED开头的最终输出

5 个答案:

答案 0 :(得分:4)

更新,使用sed:

的grep风格版本
wget ... 2>&1 | sed -n '$,$s/.*(\(.*\)).*/\1/p'

旧版本:

我想,下载后的下载时间更容易划分文件大小。 ; - )

(/usr/bin/time -p wget ... 2>&1 >/dev/null; ls -l newfile) | \
awk '
   NR==1 {t=$2};
   NR==4 {printf("rate=%f bytes/second\n", $5/t)}
'

第一个awk行存储变量t中“real xx.xx”的实际实时时间。第二个awk行将文件大小(ls -l的第5列)除以时间,并将其作为速率输出。

答案 1 :(得分:1)

这对我有用wget -O /dev/null <resource>

我使用的正则表达式是\([0-9.]\+ [KM]B/s\)

但请注意,我必须将stderr重定向到stdout,因此命令为:

wget -O /dev/null http://example.com/index.html 2>&1 | grep '\([0-9.]\+ [KM]B/s\)'

这允许923 KB/s1.4 MB/s

之类的内容

grep只是找到匹配项。要获得价值,您可以使用sed代替:

wget -O /dev/null http://example.com/index.html 2>&1 |
    sed -e 's|^.*(\([0-9.]\+ [KM]B/s\)).*$|\1|'

答案 2 :(得分:1)

仅在下载1个文件时才有效。

我开始使用sed从wget获得速度,但我发现它很烦人,所以我切换到了grep。

这是我的命令:

wget ... 2>&1 | grep -o "[0-9.]\+ [KM]*B/s"

-o选项意味着它只返回该部分。它匹配10个数字中的一个或多个,然后是空格。然后在K

之前选择MB/s

那将返回423 KB/s(例如)。

要仅查看单位,请使用grep -o "[KM]*B/s",仅使用grep -o "[0123456789]\+

答案 3 :(得分:-1)

为什么你不能这样做:

perl -ne "/^Downloaded.*?\((.*?)\)/; print $1"

答案 4 :(得分:-3)

这是建议。您可以使用wget's --limit-rate=amount选项。例如,

--limit-rate=400k会将检索率限制在400KB / s。然后它更容易你 计算总速度。为你节省时间和精神上的痛苦。