-1

我的脚本在 WHILE 循环中从头到尾逐行读取输入文件。

假设输入文件中有 100 行。

当我将运行脚本时,说script.ksh

当从输入文件中读取 1 行时,它应该显示 1 % 完成。2 % 完成,当从输入文件中读取 2 行时。并显示在...

我想在单行输出中显示从 1 到 100 的百分比完成条,而不是 100 行。

100% 完成。当脚本成功运行时。

$value % 已完成。

在这里,$value 应该根据单行中的进度从 1 变为 100。

例子:

in file ipfile.txt, I have
1
2
3
4
.
.
upto
100

count=1
while read line
do
.......
.......
count=`expr $count + 1`
done<ipfile.txt

Here $count value will change from 1 to100.
when I will run the script,
output:
1 % completed. when $count=1
2 % completed. when $count=2
and show on upto 100 %.This completion status should be in single line output.

希望我的要求很清楚,如果需要更多解释,请告诉我。

谢谢

4

3 回答 3

1
line_num = 1
while read line; do
    printf "$((line_num++))%% completed\r";
    ...
done < input-file
于 2012-10-18T20:14:02.827 回答
1

如果你有seq命令,你可以用这样的脚本模拟你想要的。在此示例中,sleep 1表示输入行的处理。

for i in $(seq 1 100)
do echo -e -n "\r$i% completed"; sleep 1
done
echo

-e开启转义符如(\r回车);-n抑制 . 末尾的换行符echo。注意回车在行首;这意味着光标位于输出的末尾,而不是数字所在的位置,这样看起来更好。您可能更喜欢使用printf命令而不是echo; 它可能更可靠。(此代码使用 bash 3.2 进行了测试。)

如果您正在阅读行,您将不得不使用 shell 算术计算自己完成的百分比。如果文件中的行数不是 100,那么您需要相应地缩放值。

一般来说,这太像艰苦的工作,不值得花时间把它做好。

于 2012-10-18T20:14:11.763 回答
1

您需要阅读 ansi 转义序列并使用它们来操纵终端位置。

于 2012-10-18T23:11:33.243 回答