Форматирование переменной с плавающей точкой в ​​операторе 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. Это даст вам нулевое дополнение для целых чисел, даже если ваша оболочка не обеспечивает его:

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

Связанный контент