スクリプト言語のインスタンスを新しい値Progress (n,m)
に置き換える必要があります。Progress label="some text title" (n,m)
(N,M)
N= integer ((n/m) * normal)
M= integer ( normal )
進行状況ステートメントは、スクリプト行のどこにあってもかまいません(さらに悪いことに、現在のスクリプトではありませんが、行に分割されます)。
値normal
は1から255までの指定された数値であり、n
浮動m
小数点数です。
これまでのところ、私のsed
実装は以下のとおりです。それはフォーマットでのみ機能し、Progress (n,m)
フォーマットでは機能しませんがProgress label="Title" (n,m)
、それは単なるナッツです:
#!/bin/bash
normal=$1;
file=$2
for n in $(sed -rn '/Progress/s/Progress[ \t]+\(([0-9\. \t]+),([0-9\. \t]+)\).+/\1/p' "$file" )
do
m=$(sed -rn "/Progress/s/Progress[ \t]+\(${n},([0-9\. \t]+).+/\1/p" "$file")
N=$(echo "($normal * $n)/$m" | bc)
M=$normal
sed -ri "/Progress/s/Progress[ \t]+\($n,$m\)/Progress ($N,$M)/" "$file"
done
簡単に言えば、これは機能しますが、より良い方法はありますか?
私のツールボックスにはsed
スクリプトbash
が含まれていますが、それほど多くはありませんperl
。awk
この問題の方が適していると思います。
サンプル入力を編集します。
Progress label="qt-xx-95" (0, 50) thermal label "qt-xx-95" ramp(slew=.75,sp=95,closed) Progress (20, 50) Pause 5 Progress (25, 50) Pause 5 Progress (30, 50) Pause 5 Progress (35, 50) Pause 5 Progress (40, 50) Pause 5 Progress (45, 50) Pause 5 Progress (50, 50)
Progress label="qt-95-70" (0, 40) thermal label "qt-95-70" hold(sp=70) Progress (10, 40) Pause 5 Progress (15, 40) Pause 5 Progress (20, 40) Pause 5 Progress (25, 40) Pause 5