我正在尝试编写一个脚本来解析文件 [ output.txt
],每行都有一个0
或1
,并且脚本将循环文件中的每个条目并显示#
if1
和.
if 0
,它与下面的代码一起工作,输出进度如下###..##.....##.#.#.
:
#!/bin/bash
entries=`cat input.txt | wc -l`
currentbar=""
while read line; do
if [[ "$line" == "1" ]]; then
let "parse_resp++"
reqstatus="#"
bar="$currentbar$reqstatus"
currentbar=$bar
echo -ne "$bar\r"
sleep 0.1
else
let "parse_resp++"
reqstatus="."
bar="$currentbar$reqstatus"
currentbar=$bar
echo -ne "$bar\r"
sleep 0.1
fi
done < input.txt
echo -ne "\n"
- 我希望条形的长度是固定的,并且基于行数(如果该行尚未解析,它将显示
-
),期望得到:###..##...---------
- 下面的代码
\r
似乎无法在当前行顶部写入,因为它输出:(
我尝试更改-
为.
但它有同样的问题)#-----------------#----------------#---------------.--------------.-------------#------------#-----------.----------.---------.--------.-------.------#-----#----.---#--.-#.
#!/bin/bash entries=`cat input.txt | wc -l` currentbar="" echo "" while read line; do if [[ "$line" == "1" ]]; then let "parse_resp++" nbleft=`echo "$entries - $parse_resp" | bc` dashleft=`seq -s- $nbleft|tr -d '[:digit:]'` reqstatus="#" bar="$currentbar$reqstatus$dashleft" currentbar=$bar echo -ne "$bar\r" else let "parse_resp++" nbleft=`echo "$entries - $parse_resp" | bc` dashleft=`seq -s- $nbleft|tr -d '[:digit:]'` reqstatus="." bar="$currentbar$reqstatus$dashleft" currentbar=$bar echo -ne "$bar\r" fi done < input.txt echo -ne "\n"
答案1
工作\r
正常,但你正在存储整个老酒吧包括$currentbar
$dashleft – 并且你只需在每次迭代中继续附加。
您或许应该使用currentbar+=$reqstatus
。