Приведение к int в awk - PullRequest
       11

Приведение к int в awk

18 голосов
/ 27 апреля 2011

Я ищу метод для приведения строки к int в awk.У меня есть следующее, которое, кажется, делает сравнение строк

( note : поле $5 представляет собой процент в одном из двух форматов: 80% или 9.0%)

awk '{if (substr($5,1,(length($5)-1)) >= 90) ...

Итак, когда я изменяю его на:

awk '{if (substr($5,1,(length($5)-1))+0 >= 90+0 ) ...

Это сравнивается, как я и предполагал.Это подходящий актерский состав?Есть ли «лучший» способ выполнить приведение?

Ответы [ 3 ]

17 голосов
/ 28 апреля 2011

Большинство новых awk-ов имеют функцию int ().

Но метод приведения, документированный в «Языке программирования Awk», показывается, как вы это делаете, используя numericValue и +0.У меня нет под рукой книги, но я думаю, что вы также можете использовать значение с плавающей запятой, используя +0.0.

Надеюсь, это поможет.

16 голосов
/ 28 апреля 2011

Вы можете просто использовать +0. скажем, переменная v - это ваше процентное значение.

$ awk -v v="80.1%" 'BEGIN{print v+0.1}'
80.2

Вам не нужно избавляться от знака %.

3 голосов
/ 18 декабря 2017

Согласно документы , int(x) соответствуют POSIX.Число по-прежнему будет с плавающей точкой (поскольку все числа в awk являются числами с плавающей запятой), но оно будет усечено до целого числа.


Добавление 0 не преобразует строку в целое число.Он преобразует его в число с плавающей точкой.

Если у вас есть старый awk, основанный на One True AWK Брайана Кернигана, например macOS awkили FreeBSD awk, вы увидите this в нижней части справочной страницы:

BUGS
     There are no explicit conversions between numbers and strings.  To force
     an expression to be treated as a number add 0 to it; to force it to be
     treated as a string concatenate "" to it.

     The scope rules for variables in functions are a botch; the syntax is
     worse.

Чтобы заставить выражение обрабатываться какчисло добавьте к нему 0


Если вам не нужны поплавки и у вас есть gawk, вы также можете использовать strtonum


Другие источники:

Версия AWK для OS X, которая взята из «Единого истинного AWK» Брайана Кернигана

Все числа в awk являютсяс плавающей точкой:

Поиск "Вся арифметика должна следовать семантике арифметики с плавающей точкой, определенной стандартом ISO C"

Поиск "по всем числамв awk плавают "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...