Ответ 1
Вы можете просто использовать +0. скажем, переменная v
- ваше процентное значение.
$ awk -v v="80.1%" 'BEGIN{print v+0.1}'
80.2
Вам не нужно избавляться от знака %
.
Я ищу метод, чтобы привести строку к int в awk. У меня есть следующее, которое, кажется, делает сравнение строк
(примечание: поле $5
представляет собой процент в одном из двух форматов: 80%
или 9.0%
)
awk '{if (substr($5,1,(length($5)-1)) >= 90) ...
Итак, когда я изменяю это на:
awk '{if (substr($5,1,(length($5)-1))+0 >= 90+0 ) ...
Это сравнивает, как я хотел. Это подходящий актерский состав? Есть ли лучший способ исполнить актерский состав?
Вы можете просто использовать +0. скажем, переменная v
- ваше процентное значение.
$ awk -v v="80.1%" 'BEGIN{print v+0.1}'
80.2
Вам не нужно избавляться от знака %
.
Большинство новых awks имеют функцию int().
Но метод кастинга, задокументированный в "Язык программирования Awk", отображается так же, как вы это делаете, используя numericValue и +0
. У меня нет удобной книги, но я думаю, что вы также можете использовать для значения float с помощью +0.0
.
Надеюсь, это поможет.
Согласно документы, int(x)
соответствует POSIX. Число все равно будет float (поскольку все числа в awk являются плавающей точкой), но он будет усечен до int.
Добавление 0 не преобразует строку в int. Он преобразует его в float.
Если у вас есть старый awk
на основе One True AWK Брайана Кернигана, например macOS awk
или FreeBSD awk
, вы увидите this в нижней части man-страницы:
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
Другие источники:
версия OS X от AWK, которая получена от "The True True AWK" Брайана Кернигана
Все числа в awk
являются плавающей точкой: