从流中获取数字


命令

记录到 chk 文件中的典型输出:

wget -O - http://website/file > /dev/null 2>chk &

是这样的:

   0K .......... .......... .......... .......... ..........  0%  143K 62s
  50K .......... .......... .......... .......... ..........  1%  433K 41s
 100K .......... .......... .......... .......... ..........  1% 1.20M 30s
 150K .......... .......... .......... .......... ..........  2%  259K 31s
 200K .......... .......... .......... .......... ..........  2% 83.2M 24s
...
 8800K .......... .......... .......... .......... .......... 98%  260K 1s
 8850K .......... .......... .......... .......... .......... 98%  329K 0s
 8900K .......... .......... .......... .......... .......... 99%  433K 0s
 8950K .......... .......... .......... .......... ......... 100%  331K=31s
2017-01-13 13:16:59 (288 KB/s) - written to stdout [9215609/9215609]

在整个下载过程中,文件会逐行更新。好吧,我只需要得到百分比:0、1、2 ...99 仅此而已。

以下脚本可以完成这项工作,即使不完美:

tail -n 5 chk | tail -n 1 | colrm 1 63 | cut -d '%' -f 1

当我需要在 bash 脚本中执行相同的操作时,就会出现问题,如下所示:

#!/bin/bash
# Test script for getting the percentage number from 'wget' output
i=0
wget -O - http://website/file > /dev/null 2>chk &
sleep 1
while (( $i < 90 ))
do
i=`tail -n 5 chk | tail -n 1 | colrm 1 63 | cut -d '%' -f 1`
echo $i
done

脚本开始获取所需的文件,写出 chk 文件,但停止并显示错误消息:

line 9: ((: < 90 : syntax error: operand expected (error token is "< 90 ")

我已经尝试使用 [[ ]]、引号...但不起作用。

有什么想法可以做得更好吗?

带有

wget,whiptail和GNU sed的进度条:

wget --progress=dot 'URL' 2>&1 | sed -un 's/.* ([0-9]+)% .*/1/p' | whiptail --gauge "Download" 7 50 0

相关内容

  • 没有找到相关文章

最新更新