Функция есть имя некоторой вычислительной процедуры. Так как она имеет имя, ее можно запрашивать именем в любой точке программы. Например, функция sqrt вычисляет квадратный корень из числа. Фиксированное множество функций встроено в awk, что означает их доступность в каждой awk-программе. Функция sqrt есть одна из них. См. главу 12 [Встроенные функции], стр. 135, содержащую список таких функций и их описания. Кроме того, можно определять свои собственные функции в своей программе. См. главу 13 [Функции, определенные пользователем], стр. 153, о том как это делать.
Путь использования функции --- выражение вызова функции, которое состоит из имени функции, непосредственно за которым идет список аргументов в скобках. Аргументы представляют выражения, поставляющие ей материалы для вычислений. Если аргументов больше одного, они разделяются запятыми. Если аргументов нет, то пишется просто `()' после имени функции. Вот несколько примеров:
sqrt(x^2 + y^2) один аргумент
atan2(y, x) два аргумента
rand() аргументов нет
Не оставляйте пробелов между именем функции и списком аргументов! Имя функции, определенной пользователем, выглядит как имя переменной, и пробел превратит ее в конкатенацию переменной с выражением внутри скобок. Пробел перед скобкой безвреден для встроенных функций, но не надо этого делать, чтобы не создать себе привычки, вредной для пользовательских функций.
Каждая функция ожидает определенное количество аргументов. Например, функция sqrt всегда вызывается с одним аргументом, числом, из которого нужно извлечь квадратный корень: sqrt(argument). Некоторые из встроенных функций позволяют опускать последний аргумент. Если так сделать, они используют что-то по умолчанию. См. главу 12 [Встроенные функции], стр. 135, где есть все детали. Если отсутствуют аргументы в вызовах пользовательских функций, то эти аргументы трактуются как локальные переменные, инициализированные пустыми строками (см. главу 13 [Функции, определенные пользователями], стр. 153).
Подобно другим выражениям, вызовы функций имеют значения, которые вычисляются на основании указанных аргументов. В примере `sqrt(argument)' значение есть квадратный корень из аргумента. Функция может также иметь побочные эффекты, такие как присваивание значений определенным переменным или действия с I/O.
Вот команда читать числа, по одному числу в строке, и печатать квадратные
корни из каждого:
$ awk '- print "The square root of", $1, "is", sqrt($1) ""' 1
a The square root of 1 is 1 3
a The square root of 3 is 1.73205 5
a The square root of 5 is 2.23607 Control-d