shell 循环中实现展示进度百分比的脚本方法2

来源:互联网 发布:物流数据可视化 编辑:程序博客网 时间:2024/06/04 01:17
    


    当我需要处理一个几万行的文件的时候,需要处理的时间是比较长的。我一开始的想法是,没处理一行,就输出一个 # 号。但是这样还是会出现很多很多的 # 号,即便是放在一行,也是非常不优雅的。所以,我想实现一个展示进度百分比的脚本。


    实现思路


    获取文件的行数


    用 i++ 实现每行处理的计数


    当前处理行数*100再除以文件行数+%得到我要输出的百分比结果


    我需要在一行展示,而不是一直追加或者每次都显示一行


    就是这些需求了。我们来逐渐实现。


    获取文件的行数


    这个比较简单,用 wc -l $file 就能获取到了。但是得到的结果我不是很满意:


    999 3.log


    1


    1


    在结果的前面有几个空格,我得把空格去掉,于是代码就改成了


    wc -l $file | sed 's/^[ \t]*//g'


    1


    1


    这样就去掉了开头的空格,然后用空格分割,取第一个就可以了,cut来实现


    wc -l $file | sed 's/^[ \t]*//g' | cut -d ' ' -f1


    1


    1


    OK,通过几个命令的组合,很容易的实现了获取行数的数字。


    echo 实现单行显示


    echo -en '\b\b\b\b'


    1


    1


    如上,就是将光标提前四个位置,并录入内容。\b是提前一个,输入几个就几个,如果已经到了开头了,就不能往前挪了,所以,多输入几个是没问题的。





宁波皮肤美容http://www.iyestar.com/cpxl/pfmr/