Bash:使用 sed 将浮点数格式化为同等精度 - 添加尾随零

问题描述 投票:0回答:1

是否可以使用 sed 格式化浮点数以扩展到相同的精度,例如小数点后8位? 因为这个问题是更大背景的一部分,所以 使用 GNU sed

是非常有必要的

输入示例:

0
126
99.0234
.38
-47.88
-234.23001101
40565004.22

目标是将尾随 0 附加到每个数字,直到达到所需的精度。 可以肯定的是,输入的数字中小数点后的位数都不会超过所需的精度。另一个(次要)目标是在小数点前添加前导零(如果缺少)。

与 bash

LC_NUMERIC=en_US.UTF-8 printf "%0.8f" .123
一样有效。

实现的输出是:

0.00000000
126.00000000
99.02340000
0.38000000
-47.88000000
-234.23001101
40565004.22000000

到目前为止我发现的只是限制位数,而不是扩展。


另一种解决方案是调用 shell 命令

LC_NUMERIC=en_US.UTF-8 printf "%0.8f\n" \3
用于 sed 处理中的特定匹配组(此处:第三个匹配组)。

输入:

<rowNo>|<date time>|<number>
(示例:
1|2024-02-01 00:27:16|.38
,数字如上)

命令(显然不起作用,用于第三场比赛组处理):

sed 's/^\([0-9]*\)|\(.*\)|\([0-9\.]*\)/\1|\2|$(LC_NUMERIC=en_US.UTF-8 printf "%.8f\n" \3))/g' test.csv
bash sed precision
1个回答
0
投票

您可以使用带有“e”修饰符的 shell 表达式:

$ LC_NUMERIC=en_US.UTF8 sed -E 's/.*/printf "%0.8f" &/e' file
0.00000000
126.00000000
99.02340000
0.38000000
-47.88000000
-234.23001101
40565004.22000000
© www.soinside.com 2019 - 2024. All rights reserved.