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

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

例如我用下载

 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的总下载速度,即string490 KB/s 。 我该怎么做呢?

PS可能需要考虑到我们实际上只下载一个文件的情况,所以不会有以FINISHED开始的最终输出

Solutions Collecting From Web of "如何从wget输出grep下载速度?"

更新,使用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行将变量“real xx.xx”的实时实时存储。 第二个awk行将文件大小( ls -l的第5列)除以时间,并将其输出为速率。

这对我来说,使用你的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|' 

当只有一个文件正在被下载时,这是有效的。

我开始使用sed来从wget获得速度,但是我发现它令人不快,所以我切换到grep。

这是我的命令:

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

-o选项意味着它只返回那个部分。 它匹配10个数字中的一个或多个,然后匹配一个空格。 然后在B/s之前选择KM

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

要grep只是单位,请使用grep -o "[KM]*B/s" ,只用数字使用grep -o "[0123456789]\+

为什么你不能这样做:

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

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

--limit-rate=400k将限制检索率为400KB / s。 那么它更容易计算总速度。 节省你的时间和精神痛苦试图正则表达它。