我需要用bash做一些“漂亮”的数字格式。我有一串逗号分隔的浮点数,科学格式(即3.14159或1.0601e-12),我需要创建一个逗号分隔列表,其中所有数字都有多个字符。空格或零是否用于填充(即'3.14'和'3.140000'都起作用)并不是很重要。我尝试使用带有“%。12f”的printf,但这当然不起作用。我没有想法(除了在角色级别上工作,但这看起来过于复杂)
我真的很感激帮助。
答案 0 :(得分:2)
如果您只想在输出中指定恒定数量的字符,则可以使用 field-width 修饰符。例如,要确保每个字段只有24个字符:
printf "%'24f\n" 3.140000 3000
答案 1 :(得分:1)
对于浮点数,使用%f,对于科学记数法,请使用%e:
$ printf "%12.2f\n" 359.197
359.20
$ printf "%12.2e\n" 359.197
3.59e+02
答案 2 :(得分: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
虽然我很想看到更优雅的方式。