1

我需要用 bash 对数字进行一些“漂亮”的格式化。我有一串科学格式的逗号分隔浮点数(即 3.14159 或 1.0601e-12),我需要创建一个逗号分隔的列表,其中所有数字都有尽可能多的字符。填充时使用空格还是零并不是很重要(即“3.14”和“3.140000”都有效)。我尝试将 printf 与“%.12f”一起使用,但这当然行不通。我没有想法(除了在角色级别上工作,但这似乎过于复杂)

我真的很感激帮助。

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

左边的零填充比动态小数精度更容易。这是一个裂缝,不确定它是否符合您的要求。

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 回答