next up previous contents
Next: 9.6 Ещ© несколько примеров Up: 9. Подсистема сканирования, анализа Previous: 9.4 Массивы

Подраздел


9.5 Встроенные функции языка awk

Язык awk имеет набор встроенных функций для выполнения некоторых в известном смысле стандартных операций.

9.5.1 Строковые функции

gensub(r, s, h [, t])

предназначена для поиска в строке t последовательности, которая удовлетворяет регулярному выражению r. Если строка h содержит в качестве первого символа знак g или G, то если найдена последовательность удовлетворяющая r, то она заменяется на s. В противном случае, строка h должно быть числом, указывающим, которая по порядку последовательность удовлетворяющая выражению r должна быть заменена на s. Если строка t опущена, то вместо не© используется $0.

В пределах текста строки s может быть использованы комбинации вида \n, где n есть целое от 0 до 9 включительно. Такого рода комбинация применяется, чтобы указать текст в n-ных по порядку скобках. Комбинация \0 означает полный текст соответствующий регулярному выражению r, как это делает символ SPMamp;;.

В отличие от sub() и gsub() здесь модифицированная строка возвращается как результат функции не изменяя при этом строку t.

gsub(r, s [, t])

Каждую подстроку в строке t удовлетворяющую выражению r заменить на строку s. В качестве значения функции возвращается количество произвед©нных замен. Если строка t опущена, то используется $0. Знак SPMamp;; (амперсанд) в замещающем тексте заменяется на текст удовлетворяющий выражению r. Если вы хотите использовать литеральное значение амперсанда, то следует использовать \&. Перед интенсивным использованием знака SPMamp;; (амперсанд) полезно прочесть разделы описания языка awk касающиеся использования специальных комбинаций символов, начинающихся обратной косой чертой (\).

index(s, t)

Вернуть индекс (смещение от начала) строки t в строке s, если строка t содержится в строке s. В противном случае вернуть 0.

length([s])

Вернуть длину строки s или длину $0, если s опущено.

match(s, r)

Вернуть позицию, с которой начинается последовательность удовлетворяющая регулярному выражению r или 0, если такой последовательности нет, а также установить переменные RSTART и RLENGTH.

split(s, a [, r])

Разбить строку s на части, которые присвоить элементам массива a. Разбивание строки s произвести в соответствии с регулярным выражением r. Если r опущено, то в качестве разделителя используется значение переменной FS. Массив a очищается перед разбиванием строки s.

sprintf(fmt, expr-list)

Вернуть сформированную строку для печати expr-list в соответствии с форматом fmt. Например
awk -v A=192 '{print(sprintf(SPMquot;где t - имя файла, A - имя переменной, которой присваивается значение 192, а затем печатается в соответствии с форматом %20d.

sub(r, s [, t])

Почти то же, что gsub(), но заменяется только первая подходящая подстрока.

substr(s, i [, n])

Вернуть подстроку, которая начинается в позиции i строки s с длиной максимум n символов. Если n опущено, то возвращается часть s начиная с позиции i.

tolower(str)

Вернуть строку str с символами преобразованными в строчные буквы. Неизображаемые символы или числа не преобразуются.

toupper(str)

Вернуть строку str с символами преобразованными в заглавные (прописные) буквы.

9.5.2 Функции времени

Для получения времени программа awk имеет две функции:

systime()

Возвращает текущее время в секундах начиная с 1 января 1970 года.

strftime([format [, timestamp]
)]
Возвращает отформатированную отметку времени (timestamp) в соответствии с форматом format. Строка отметки времени должна иметь вид как после функции systime(). Если строка timestamp опущена, то используется текущее время. Если строка format опущена, то используется формат, который применяется в программе date. Для получения списка допустимых форматов можно обратиться к спецификации функции strftime() в ANSI C.

9.5.3 Арифметические функции

В awk имеются арифметические функции.

atan2(y, x)

Возвращает значение arctan(y/x) в радианнах.

cos(expr)

Возвращает значение cos(expr) в радианнах.

exp(expr)

Возвращает значение экспоненциальной функции.

int(expr)

Возвращает целое от expr.

log(expr)

Возвращает значение натурального логарифма от expr.

rand()

Возвращает случайное значение в интервале [0-1].

sin(expr)

Возвращает значение sin(expr).

sqrt(expr)

Возвращает значение sqrt(expr) (квадратный корень из expr).

srand([expr])

Устанавливает новое исходное значение для генератора случайных чисел. Возвращает предыдущее исходное значение. Если expr опущено, то используется текущее время в секундах. Таким образом, если вы желаете, чтобы у вас при каждом новом запуске awk, генерировалась новая псевдослучайная последовательность в функции rand(), то вам полезно вызвать функцию srand() перед циклом обращений к функции rand().

9.5.4 Опеределение новых функций

Наконец, в программах awk можно определять новые функции. Определение функций выполняется следующим образом:
function name(parameter list) { statements }
Внутри тела функции можно определить локальные переменные, которые должны быть описаны в поле параметров, но отделены от них более чем одним пробелом. Например,
function MyFunction(i,j, a,b,c)
# a, b и c являются локальными переменными.
{
...
}
{MyFunction(43,61)}
Заметим, что левая скобка в вызове функции должна следовать сразу за именем функции (без пробела).


next up previous contents
Next: 9.6 Ещ© несколько примеров Up: 9. Подсистема сканирования, анализа Previous: 9.4 Массивы
Andrei Chevel
Andrei.Chevel@pnpi.spb.ru