Next: 9.6 Ещ© несколько примеров
Up: 9. Подсистема сканирования, анализа
Previous: 9.4 Массивы
Подраздел
Язык awk имеет набор встроенных функций для выполнения некоторых в
известном смысле
стандартных операций.
- 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 с символами преобразованными в заглавные
(прописные) буквы.
Для получения времени программа awk имеет две функции:
- systime()
-
Возвращает текущее время в секундах начиная с 1 января 1970 года.
- strftime([format [, timestamp]
- )]
Возвращает
отформатированную
отметку времени (timestamp) в соответствии с форматом format.
Строка отметки времени должна иметь вид как после функции systime().
Если строка timestamp опущена, то используется текущее время. Если
строка format опущена, то используется формат, который применяется в
программе date. Для получения списка допустимых форматов можно
обратиться к спецификации функции strftime() в ANSI C.
В 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().
Наконец, в программах awk можно определять новые функции.
Определение функций
выполняется следующим образом:
function name(parameter list) { statements }
Внутри тела функции можно определить локальные переменные, которые должны
быть описаны в поле параметров, но отделены от них более чем одним
пробелом. Например,
function MyFunction(i,j, a,b,c)
# a, b и c являются локальными переменными.
{
...
}
{MyFunction(43,61)}
Заметим, что левая скобка в вызове функции должна следовать сразу за
именем функции (без пробела).
Next: 9.6 Ещ© несколько примеров
Up: 9. Подсистема сканирования, анализа
Previous: 9.4 Массивы
Andrei Chevel
Andrei.Chevel@pnpi.spb.ru