在 SED 语句中格式化浮点变量

在 SED 语句中格式化浮点变量

作为 makefile 配方的一部分,我想重复调整某些文本文件中的几行txt.in。特别是,我想更新第三行,其中仅包含两个由空格分隔的数字。它们的格式应为0.00 0.00.因此,我在我的 makefile 中包含了下面的代码来测试我是否可以做到这一点。

# Makefile to test for-loop
SHELL=/bin/zsh

for:
    for k in 1 2 3; do \
        let n="$$k*0.25"; \
        let m="$$n+0.25"; \
        sed -i "3s/.*/$$n $$m/" txt.in; \
    done

0.7500000000 1.0000000000就是最终结果。可能有更有效的方法来做到这一点,我很乐意了解这些,但我真正想知道的是是否有一种方法可以使格式正确。

答案1

通过管道输出

sed 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g'

以获得所需的格式。实际上,您的sed声明将更改为:

sed -i "3s/.*/$$n $$m/" txt.in | sed -i 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g' txt.in; \

答案2

您也可以使用printf.即使您的 shell 不提供整数,这也会为您提供零填充:

o="$(printf "%.2f\n" "$$m")"
p="$(printf "%.2f\n" "$$n")"
sed -i "3s/.*/$$o $$p/" txt.in;

相关内容