Форматирование переменной с плавающей запятой в инструкции SED

Как часть рецепта makefile, я хочу несколько раз отрегулировать несколько строк в некотором текстовом файле txt.in В частности, я хочу, в частности, обновить третью строку, содержащую просто два числа, разделенных пробелом. Их следует отформатировать как 0.00 0.00 . Таким образом, я включил код в мой make-файл, чтобы проверить, могу ли я это сделать.

 # 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 это дает 0.7500000000 1.0000000000 . Там могут быть более эффективные способы сделать это, и я был бы рад узнать об этом, но я бы очень хотел узнать, есть ли способ получить формат.

2 Solutions collect form web for “Форматирование переменной с плавающей запятой в инструкции SED”

Вытяните выход через

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

Вы также можете использовать printf . Это даст вам нулевое заполнение для целых чисел, даже если ваша оболочка не предоставляет его:

 o="$(printf "%.2f\n" "$$m")" p="$(printf "%.2f\n" "$$n")" sed -i "3s/.*/$$o $$p/" txt.in; 
  • замените с начала строки на 1 из нескольких шаблонов в конец другой строки со вторым шаблоном
  • «Sed» переписать файл для отображения целых чисел и удалить оставшиеся символы
  • Цифры с нулевым заполнением до 2 цифр с помощью sed
  • Выделите n-й столбец вывода ps
  • Как заполнить конечные теги с помощью sed, awk или любой другой команды?
  • Добавление значения ко всем столбцам
  • Проверка формата имени файла в оболочке linux
  • удалить строки в файле list_file из другого файла (ов)
  • Создание файла из другого файла на основе числового значения в каждой строке
  • Как сопоставить шаблон и заменить только часть шаблона?
  • Разделить входной файл с разрывами строк
  • Linux и Unix - лучшая ОС в мире.