bash - 从流中获取数字
bash - getting a number from a stream
从命令记录到 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]\+\)% .*//p' | whiptail --gauge "Download" 7 50 0
从命令记录到 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]\+\)% .*//p' | whiptail --gauge "Download" 7 50 0