парсинг числа в awk

Я думаю, что место для взгляда является src пакетом в спецификации, файл должен быть разделом, где команда настройки указана. Но я не знаю, могли ли Вы сделать это, не устанавливая его.

6
08.02.2014, 22:25
4 ответа
Обратите внимание, что, хотя вам и нужно удалить запятые из входных данных перед добавлением значений, но [11704]awk[11705] с удовольствием распечатает результаты с тысячами разделителей или без них. В качестве примера, если вы используете следующий код: посмотрите на переменную [11706]fmt[11707], определенную в коде. [12144]Ваш ввод :[12145]Awk Code :[12146]Результат :[12147]Если вы хотите попробовать это в системе [11708]Solaris/SunOS[11709], измените [11710]awk[11711] в начале этого скрипта на [11712]/usr/xpg4/bin/awk[11713] ,[11714]/usr/xpg6/bin/awk[11715] , или [11716]nawk[11717] . [12148] Надеюсь, это будет полезно.
    .
7
27.01.2020, 20:20

Просто удалите запятые из поля, которое Вы анализируете:

awk '{sub(",", "", $2); X+=$2} END {print X}' file

Это запустилось как быстрое-и-грязное решение, но оно походит там, на самом деле не другой путь. Из Руководства AWK:

Строка преобразовывается в число путем интерпретации числового префикса строки как цифры: "2.5" преобразовывает в 2,5, "1e3" преобразовывает в 1 000, и "25fix" имеет числовое значение 25. Строки, которые не могут быть интерпретированы как верные номера, преобразовываются в нуль.

И в то время как формат для числа к преобразованию строк может быть установлен через CONVFMT переменная, нет такой опции для строки к преобразованиям чисел. [1]


Даже gawkstrtonum (), при удостаивании десятичного разделителя, определенного локалью системы, игнорирует (т.е. убегает в), тысяча разделителей.

11
27.01.2020, 20:20
  • 1
    , который я собирался прокомментировать с тем же самым awk ручным отрывком, когда я заметил, что "Это сообщение было отредактировано" на вершине. +1, я думаю, что этот ответ должен быть принят. –  GnP 14.02.2014, 23:07
  • 2
    это не работает на многие локали –  Neil McGuigan 19.08.2016, 21:23

Мне нравится использовать bc для вещей как это. Предоставленный Вы только добавляете, но этот шаблон полезен, если необходимо сделать более сложные вещи, которые требуют bc для того, чтобы сделать вычисления.

$ paste -s -d+ <(awk '{gsub(/,/,"",$2); print $2}' sample.txt) | bc
16852.70
3
27.01.2020, 20:20
  • 1
    Почему вызывают awk для удаления запятой и не имеют его, делают математику? Какая сложная математика может bc сделайте это awk (или гну awk), не может? –  Ricky Beam 19.02.2014, 03:05
  • 2
    @RickyBeam - основные преобразования большой. Я нахожу awk так как неаккуратный язык - другой, и я ежедневно использую Perl. При разработке моего кода в bc намного легче отладить его по сравнению с отладкой awk сценарий. Это - очевидно, мое мнение, но вышеупомянутый шаблон легче использовать для решения множества проблем по сравнению с необходимостью к пользовательскому ремеслу awk решения, которые чувствуют больше один прочь мне. Этого достаточно для выравнивания по ширине DV? –  slm♦ 19.02.2014, 03:16

@Martin Vegter это должно быть mawk, поэтому вы получаете ошибку, смотрите, я могу произвести ту же ошибку

[1] Установите gawk и попробуйте

.
2
27.01.2020, 20:20

Теги

Похожие вопросы