1

bashを使用して数値を「きれいに」フォーマットする必要があります。科学的形式(つまり、3.14159または1.0601e-12)のカンマ区切りの浮動小数点数の文字列があり、すべての数字が同じ数の文字を含むカンマ区切りのリストを作成する必要があります。塗りつぶしにスペースとゼロのどちらを使用するかはそれほど重要ではありません(つまり、「3.14」と「3.140000」の両方が機能します)。「%.12f」でprintfを使ってみましたが、もちろんうまくいきません。私はアイデアがありません(キャラクターレベルでの作業を除いて、それは過度に複雑に思えます)

私は本当に助けに感謝します。

4

3 に答える 3

2

出力に一定数の文字を指定するだけの場合は、field-width修飾子を使用できます。たとえば、各フィールドが正確に24文字であることを確認するには、次のようにします。

printf "%'24f\n" 3.140000 3000
于 2012-06-27T21:24:50.093 に答える
1

浮動小数点の場合は%fを使用し、科学的記数法の場合は%eを使用します。

$ printf "%12.2f\n" 359.197
      359.20
$ printf "%12.2e\n" 359.197
    3.59e+02
于 2012-06-27T21:25:58.530 に答える
0

左側のゼロパディングは、動的な10進精度を実行するよりも簡単です。ここに亀裂がありますが、それがあなたの要件を満たしているかどうかはわかりません。

IFS=, read -ra a <<<'1.234567e+3,5432.623,54326e+4,12.26546e+3,1000000000000,2.3641867e+4'

for idx in "${!a[@]}"; do
    printf -v "b[${b:=0}>b&&(b=$b),idx+1]" '%f%n' "${a[idx]}" b
done

for idx in "${!a[@]}"; do
    printf -v 'a[idx]' '%#.*f' $((b - ${#b[idx+1]})) "${b[idx+1]}"
done

# IFS=, declare -a 'b=("${a[*]}")'
# echo "$b"
printf '%s\n' "${a[@]}"

これは

1234.567000000
5432.623000000
543260000.0000
12265.46000000
1000000000000.
23641.86700000

もっとエレガントな方法を見たいのですが。

于 2012-06-28T00:11:17.083 に答える