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;