gawk: Суммирующие поплавки, отформатированные с помощью разделителя запятой

Я пытаюсь суммировать float, которые используют запятую как разделитель, а gawk – целочисленные вычисления. Вот сценарий:

BEGIN { FS=";" OFS=";" CONVFMT = "%2.2f" } { print $1 print $2 print $1+$2 } 

Я использую этот файл данных:

 4,3;5,7 

и вызывая сценарий следующим образом:

 LC_ALL=fr_BE gawk -f test.awk < t.txt 

Я получаю этот вывод:

 4,3 5,7 9 

У меня есть локальная настройка fr_BE, но результат по-прежнему неверен. Как я могу это исправить?

  • Как получить подробный графический интерфейс Kubuntu для изменения региональных / локальных настроек без установки всего KDE?
  • Неанглийские буквы в html2text?
  • Невозможно установить переменную LC_TIME для текущего процесса
  • Некоторые символы UTF-8, которые не распознаются grep или sed
  • Консольный шрифт - как показать акценты?
  • Должен ли LC_ALL = fr_FR.UTF-8 date +% x 'давать согласованные результаты по всем машинам?
  • Почему соответствует строчным буквам в bash?
  • Почему переменные locale не отображаются на выходе env или printenv?
  • 2 Solutions collect form web for “gawk: Суммирующие поплавки, отформатированные с помощью разделителя запятой”

    Ответ заключается в использовании --use-lc-numeric gawk.

    –use-LC-цифровой

    Это заставляет gawk использовать символ десятичной точки локали при анализе входных данных. Хотя стандарт POSIX требует такого поведения, и gawk делает это, когда -posix действует, по умолчанию следует следовать традиционному поведению и использовать период как десятичную точку, даже в тех местах, где период не является символом десятичной точки. Этот параметр переопределяет поведение по умолчанию без полной драконовской строгости опции -posix.

    пример

    Скажем, у нас есть этот файл данных:

     $ cat t.txt 4,3;5,7 4,9;5,7 

    Чтобы облегчить просмотр вывода, я изменил эту строку в test.awk :

     print "Total: "$1+$2 

    Теперь, когда вы запускаете его, используя вышеупомянутый переключатель:

     $ LC_ALL=fr_BE gawk --use-lc-numeric -f test.awk < t.txt 4,3 5,7 Total: 10 4,9 5,7 Total: 10,60 

    Рекомендации

    • локализация чисел с плавающей запятой gawk
    • 6.1.4. Преобразование строк и чисел

    Я думаю, что проблема в gawk не может преобразовать строку 4,3 в число с плавающей запятой. Вы можете исправить это, заменив . , Для входа в @glenn jackman:

     BEGIN { FS=";" OFS=";" CONVFMT = "%2.2f" } { gsub(",",".",$0) print $1 print $2 print $1+$2 } $ LC_ALL=fr_BE gawk -f test.awk < file 4.3 5.7 10 4.9 5.7 10.6 
    Linux и Unix - лучшая ОС в мире.