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

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

173.91,0.00%,36.10%,1.71 

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

 173.91,0,0.3610,1.71 

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

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 
  • Изменение вхождения строки в файл при соблюдении новых строк строки DOS
  • Заменить с sed до совпадения в строке
  • Селективное извлечение данных
  • sed match word1 и word2, чтобы получить слово между ними
  • Как я могу сортировать список с уровнем major.minor.patch и иногда rc правильно?
  • sed: -e выражение # 1, char 4: неизвестная команда:
  • Сопоставление столбцов и их замещение
  • Извлеките строки из файла containg From <str1> To <str2>
  • Тестирование регулярного выражения из stdin с помощью grep | sed | awk
  • Именованный серийный приращение SED oneliner
  • Linux sed - поиск подстановочной строки без пробелов в ней
  • grep все строки, начинающиеся с определенного символа, и заканчиваются другим символом
  • Interesting Posts

    `test` и` [`- разные бинарные файлы, любая разница?

    Компиляция Riofs не может скомпилироваться с поддержкой -force-head-запросов

    как файл / proc / net / dev заполнен?

    Как узнать устройство MTD char для чтения / записи?

    Ядро не может загрузиться после обновления на Fedora OS 15

    Как добавить файл PDF в другой файл PDF после указанной страницы?

    Есть ли способ ограничить объем памяти, который может использовать конкретный процесс в Unix?

    Инициирование систем и управление услугами в разных дистрибутивах

    Каковы абсолютные минимальные требования к загрузке системы Linux

    Каков правильный способ разблокировать корневую файловую систему, охватывающую два устройства LUKS, только однажды введя пароль, используя systemd?

    Утилита командной строки для изучения бит-скручивающих хаков

    Соединение с tigervnc немедленно закрывается

    Паника в ядре при прохождении noatime в бутаргах

    Как проверить, не работает ли USB WiFi-адаптер, или маршрутизатор выходит за пределы допустимого диапазона?

    Ошибка Startx во FreeBSD

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