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, но результат по-прежнему неверен. Как я могу это исправить?

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
  • Как уменьшить размер языкового архива?
  • Почему переменные locale не отображаются на выходе env или printenv?
  • Почему соответствует строчным буквам в bash?
  • Говоря «tr», что az - это не только ASCII
  • Являются ли выходы / proc / meminfo, / proc / cpuinfo и т. Д. Всегда на английском языке?
  • У меня есть переменная окружения для LANG, установленная в ~ / .profile, но она не устанавливается
  • Исправлена ​​диакритика в дампе mysql на CentOS
  • Невозможно установить переменную LC_TIME для текущего процесса
  • как экспортировать zh_CN.utf8 в среду Arch LiveCD?
  • Чувствительность к регистру в квадратных скобках
  • Символы, отличные от ASCII, обрабатываются неправильно в командной строке
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.