5

bashスクリプトを使用して小さなプログレスバーを作成したいと思います。

プログレスバーを生成するには、ログファイルから進行状況を抽出する必要があります。

このようなファイル(ここではrun.log)の内容は次のようになります。

2d 15hを終了する時間、42.5%完了、残り時間231856

私は今、42.5%を分離することに興味があります。問題は、この数字の長さと数字の位置が可変であるということです(たとえば、「終了までの時間」には、23時間や59分などの1つの数字しか含まれない場合があります)。

経由でポジションを試してみました

echo "$(tail -1 run.log | awk '{print $6}'| sed -e 's/[%]//g')"

これは、「終了までの時間」と%記号を介して短時間失敗します

echo "$(tail -1 run.log | egrep -o '[0-9][0-9].[0-9]%')"

これは、10%以上の数字でのみ機能します。

より可変的な数の抽出のための解決策はありますか?

================================================== ====

更新:プログレスバーの完全なスクリプトは次のとおりです。

#!/bin/bash

# extract % complete from run.log
perc="$(tail -1 run.log | grep -o '[^ ]*%')"

# convert perc to int
pint="${perc/.*}"

# number of # to plot
nums="$(echo "$pint /2" | bc)"

# output
echo -e ""
echo -e "   completed: $perc"
echo -ne "   "
for i in $(seq $nums); do echo -n '#'; done
echo -e ""
echo -e "  |----.----|----.----|----.----|----.----|----.----|"
echo -e "  0%       20%       40%       60%       80%       100%"
echo -e ""
tail -1 run.log
echo -e ""

皆さん、助けてくれてありがとう!

4

4 に答える 4

4

あなたの例に基づいて

grep -o '[^ ]*%'

あなたが望むものを与える必要があります。

于 2013-01-30T13:34:46.230 に答える
1

以下のコマンドから%を抽出できます。

tail -n 1 run.log | grep -o -P '[0-9]*(\.[0-9]*)?(?=%)'

説明:

grep options:
-o : Print only matching string.
-P : Use perl style regex

regex parts:
[0-9]* : Match any number, repeated any number of times.
(\.[0-9]*)? : Match decimal point, followed by any number of digits. 
              ? at the end of it => optional. (this is to take care of numbers without fraction part.)
(?=%)  :The regex before this must be followed by a % sign. (search for "positive look-ahead" for more details.)
于 2013-01-30T13:29:43.790 に答える
0

comma (,)ファイルの最初の進行状況を分離できるはずです。,つまり、との間の文字が必要です%

于 2013-01-30T13:28:50.993 に答える
0

あなたの目標を達成するための多くの方法があります。読みやすいのでカットを数回使いたいです。

cut -f1 -d'%' | cut -f2 -d',' | cut -f2 -d' '

最初のカット後:

 Time to finish 2d 15h, 42.5

2番目以降(スペースに注意):

 42.5

そして、スペースを取り除くための最後の結果、最終結果:

42.5
于 2013-01-30T13:35:18.403 に答える