Номер или строка
10.15. Номер или строка
Переменные, поля и выражения могут иметь цифровое или строчное значение в соответствии с контекстом. Например, в контексте выражения, подобного следующему: pop += $3 pop и $3 должны трактоваться как цифровые.
В контексте строки, подобной: print $1 ":" $2 строки $1 и $2 сливаются.
В операторах присвоения "v = e" или "op = e" тип "v" станет таким же, как и у "e". В двухсмысленном контексте: $1 == $2 тип сравнения зависит от того, являются поля цифровыми или строковыми и это будет определено только тогда, когда будет работать программа. Тип будет отличаться для каждой записи.
Если два операнда являются цифровыми, то сравнение будет цифровым, если операнды являются строковыми, то сравнение - строковое. Все поля переменных имеют строковый тип; дополнительно каждое поле, которое содержит только цифры, имеет цифровой тип. Например, сравнение "$1 == $" успешно выполнится для любой части ввода: 1 1.0 +1 0.1e+1 10E-1 001 но неуспешно для: (ноль) 0 (ноль) 0.0 0a 0 1e50 1.0e50
Существуют две идиомы приведения выражения к одному или другому типу: number"" - присоединяет нулевую строку к number для приведения к строковому типу; string+0 - добавляет ноль к string для приведения к цифровому типу.
Чтобы выполнить строковое сравнение между двумя полями, используйте: $1 "" == $2 "" Так значение: "12.34x" равно 12.34, а значение "x12.34" равно нулю.
Значение строки арифметического выражения вычисляется путем формирования строки с преобразованием формата выводного файла.
Неустановленные переменные имеют цифровое значение 0 (ноль) и строковое значение "".
Несуществующие поля имеют только строковое значение ""; они не являются цифровыми.