SED ステートメントでの浮動小数点変数のフォーマット

SED ステートメントでの浮動小数点変数のフォーマット

makefile レシピの一部として、テキスト ファイル内のいくつかの行を繰り返し調整したいと考えていますtxt.in。特に、スペースで区切られた 2 つの数字のみを含む 3 行目などを更新したいと考えています。これらは としてフォーマットする必要があります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。これにより、シェルがゼロパディングを提供していなくても、整数にゼロパディングが行われます。

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

関連情報