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

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

173.91,0.00%,36.10%,1.71 

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

 173.91,0,0.3610,1.71 

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

  • Linux + заменить STRING / WORD в файле согласно правилу
  • SED на Mac OS X
  • Добавить что-то в каждый список в файле
  • Как объединить файлы CSV
  • Добавьте пробел или вкладку перед последним символом в каждой строке
  • Заменить первое появление шаблона в файле, который может содержать косую черту
  • умножение каждой строки
  • Что я могу узнать об этой части кода?
  • 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 
    Linux и Unix - лучшая ОС в мире.