В рамках рецепта 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
. Это даст вам нулевое дополнение для целых чисел, даже если ваша оболочка не обеспечивает его:
o="$(printf "%.2f\n" "$$m")"
p="$(printf "%.2f\n" "$$n")"
sed -i "3s/.*/$$o $$p/" txt.in;