是否可以使用 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
您可以使用带有“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