Номер или строка

Переменные, поля и выражения могут иметь цифровое или строчное значение в соответствии с контекстом. Например, в контексте выражения, подобного следующему:

	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
(ноль) и строковое значение "".

Несуществующие поля имеют только строковое значение "";
они не являются цифровыми.

Еще материалы по теме: