Превращение процентов в десятичные числа?

У меня есть CSV-файл, который имеет проценты здесь и там, выраженные в текстовом формате, например

173.91,0.00%,36.10%,1.71 

Вопрос дня – как мне превратить этот пример в

 173.91,0,0.3610,1.71 

Изменить для добавления: вы не должны полагаться на позицию полей процента. Вы должны обнаружить их на основании знака%.

  • Живая замена, при просмотре журнала с использованием LESS
  • Как я могу сортировать файл .txt по двум столбцам?
  • Печать регулярного выражения Sed в файл .txt
  • Найти строку в одном разделе файла с несколькими разделами
  • Как использовать sed для замены ключей в файле с помощью регулярного выражения?
  • Замените регулярное выражение на строку, содержащую совпадение
  • как заменить выражение sed (изменить и распечатать только согласованную строку) с выражением perl?
  • Как ограничить MAX MIN длиной строки?
  • 2 Solutions collect form web for “Превращение процентов в десятичные числа?”

     $ echo '173.91,0.00%,36.10%,1.71'|perl -pe 's{\d+\.\d+%}{$&/100}eg' 173.91,0,0.361,1.71 

    Регулярное выражение ищет float с% и в последних фигурных скобках вычисляет выражение: сопоставление строки $& делится на 100.

    Вот пример awk :

     $ awk -F, '{sub(/%/,"",$2); sub(/%/,"",$3); \ printf("%.2f,%.0f,%.4f,%.2f\n"), $1, $2, $3/100, $4}' ex.txt 173.91,0,0.3610,1.71 к $ awk -F, '{sub(/%/,"",$2); sub(/%/,"",$3); \ printf("%.2f,%.0f,%.4f,%.2f\n"), $1, $2, $3/100, $4}' ex.txt 173.91,0,0.3610,1.71 

    Детали

    1. Мы говорим awk разбить содержимое файла ex.txt запятыми, -F, ex.txt
    2. sub(/%/,"",$2) & sub(/%/,"",$3) отмените процентные знаки.
    3. printf("%.2f,%.0f,%.4f,%.2f\n") позаботится о форматировании всего.
    4. Параметры printf , $1 , $2 , $4 – это всего лишь содержимое файла, 3-е, $3/100 мы делим на 100, чтобы получить его в десятичной форме.

    Улучшение дизайна

    Одна вещь, которую мы можем немедленно улучшить, предполагая, что мы не заботимся о процентных знаках, заключается в том, чтобы полностью удалить их с помощью gsub чтобы глобально заменить их.

     $ awk -F, '{sub(/%/,"",$0); \ printf("%.2f,%.0f,%.4f,%.2f\n"), $1, $2, $3/100, $4}' ex.txt 173.91,0,0.3610,1.71 
    Interesting Posts

    Как скопировать из приложения, такого как браузер, в Emacs поверх существующего текста?

    Debian не тестирует SDDM

    Как вы помните последний (n-й?) Переданный аргумент предыдущей команды, которую вы использовали с bash?

    Если я зарегистрирован как root, как мне перезапустить mysql или apache с параметрами?

    Rsyncing несколько файлов с пробелами в именах

    Ctrl Right и Ctrl Left не перемещается из одного слова в другое в Fish Shell

    Настройки разрешения GRUB2 не соблюдаются Debian – мусор на экране

    Удалите первые n байтов файлов

    SD-карта недоступна (работает в старой Nokia хотя)

    Виртуальные хосты Nginx для нескольких контейнеров LXC

    Как распространять общие конфигурации среди блоков сервера Nginx?

    Недавно установленная установка Debian не распознается

    Как определить, каким образом программное обеспечение установлено на Linux

    Как показать историю работы принтера CUPS?

    Текст обтекания и отступов с использованием coreutils

    Linux и Unix - лучшая ОС в мире.