-1

私のスクリプトは、WHILEループで入力ファイルを最初から最後まで行ごとに読み取っています。

入力ファイルに100行あるとしましょう。

スクリプトを実行するとき、script.kshと言います

入力ファイルから1行が読み取られると、1%完了したことが表示されます。入力ファイルから2行が読み取られると、2%完了しました。と表示...

100行ではなく、1行の出力で1から100までの完了率バーを表示したいと思います。

100%完了しました。スクリプトが正常に実行されたとき。

$ value%完了しました。

ここで、$ valueは、1行の進行状況に応じて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でテストされています。)

行を読んでいる場合は、シェル演算を使用して自分で完了率を数える必要があります。ファイルの行数が100でない場合は、それに応じて値をスケーリングする必要があります。

一般的に、これはハードワークに非常に似ているため、正しく行うために費やす時間の価値はありません。

于 2012-10-18T20:14:11.763 に答える
1

ANSIエスケープシーケンスを読み上げ、それらを使用して端末の位置を操作する必要があります。

于 2012-10-18T23:11:33.243 に答える