在 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;

相關內容