先行 0 を表示し、末尾 0 を表示しないように 10 進形式を指定するにはどうすればよいですか?

先行 0 を表示し、末尾 0 を表示しないように 10 進形式を指定するにはどうすればよいですか?

Ubuntu 14.04.1 LTS 64ビットbashコマンドプロンプトに次のスクリプトがあります。

S=0.030
F=0.150
N=10
reso=20
DIFF=`echo "scale=3; $F - $S" | bc -l`
df=`echo "scale=3; $DIFF / $N" | bc -l`
is=`echo "scale=3; $S / $df" | bc -l`
if=`echo "scale=3; $F / $df" | bc -l`
cd wgdisp-out
for i in `seq 0 $N` 
    do
        f=`echo "scale=3; $S + $i * $df" | bc -l | awk ' sub("\\.*0+$","") '`
        #h5totxt hsli0$f.h5 | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200 | sed -n '/^[[:digit:]]/p' | cut -d , -f 1
        echo $f
    done

fをで表示したいです0.03, 0.042, 0.054, .... 0.138, 0.15。たとえば、fがファイル名に使用されるため、これが重要ですhsli0.03.h5。誰でも正しい方向を教えてもらえますか?私はシェルの算術に慣れていません。

編集する:次の設定を試しましたが、目的の出力を生成できず、サイズ変更オプションもbc機能しないようです。

f=`echo "scale=3; $S + $i * $df" | bc | sed -e 's/^\./0./' -e 's/$^\/0/./'`

編集2:機能させるには、次の単一のコマンドを使用します。

f=`echo "scale=3; $S + $i * $df" | bc | sed -e 's/^\./0./;s/[0]*$//g'`

ベストアンサー1

は制限に使用される特殊変数bcです。scaleスケール(カンマの後の桁数) /(除算)などの一部の演算子の結果.表示された数値の精度ではなく、bc計算に使用されます。

たとえば、scale=1; 1/3結果は0.33/10)への距離が長いです1/3

計算には大規模な値を使用する必要があり、表示される場合にのみ減らす必要があります(たとえば、scale末尾で除算)。1

比較する:

$ echo "scale=100; r=1/3*300; scale=3; r/1" | bc
99.999

そして:

$ echo "scale=3; 1/3*300" | bc
99.900

私は次のように書きます:

n=10
echo "
  s = 0.030
  f = 0.150
  n = $n
  r = 20
  scale = 100
  d = (f - s) / n
  scale = 3
  for (i = s; i <= f; i += d) i/1" |
    bc |
    sed 's/^\./0./;s/0*$//' |
    while read f; do
      h5totxt "hsli$f.h5" | harminv -vt 0.1 -w 2-3 -a 0.9 -f 200
    done

おすすめ記事