|
СИНТАКСИС |
|||||
awk [опции] ['скрипт_awk'] [файл...] | |||||
ОПИСАНИЕ |
|||||
Утилита awk ищет в файле строки, удовлетворяющие шаблонам, заданным в скрипте_awk, и выполняет над ними действия, заданные в скрипте_awk. Если не указано ни одного файла или задано имя файла -, используется стандартный ввод. Результат работы awk направляется в выходной поток. | |||||
ОПЦИИ |
|||||
|
ЯЗЫК awk
Скрипт_awk представляет собой программу на специальном языке awk, описывающую шаблоны, по которым отбираются строки и действия над ними. Скрипт представляет собой последовательность элементов, каждый из которых имеет вид:
[ шаблон ] { действие }
Семантика элемента такова, что если находится строка, соответствующая данному шаблону, то над ней выполняется данное действие. Если шаблон пропущен, то действие выполняется над всеми строками файла. Описание шаблонов основывается на базовых регулярных выражениях (РВ), описание действий - на синтаксисе языка программирования C. При работе awk читает файл последовательно, строку за строкой и над строками, удовлетворяющими заданным в скрипте шаблонам, выполняет заданные действия.
Описания шаблонов
Шаблон представляет собой РВ, заключенное в символы "/.../". В языке awk синтаксис базовых РВ расширен следующими дополнениями:
В шаблоне также допускаются выражения отношения, которые имеют вид:
выражение операция_принадлежности выражениеили
выражение операция_отношение выражениеОперации_принадлежности бывают: "~" (принадлежит) и "!~" (не принадлежит) . Операции отношения: "==", "!=", ">", ">=", "<", "<=" - в их обычном смысле. В левой части таких выражений в обоих случаях обычно применяется имя поля строки, в правой, в первом случае - шаблон, во втором - любое выражение.
Допускается логическая комбинация шаблонов с использованием операций "&&", "||", "!".
Комбинация вида:
шаблон1, шаблон2означает применение задаваемых с данными шаблонами действий к строке, удовлетворяющей шаблону1, и далее - ко всем следующим за ней строкам, вплоть до появления строки, удовлетворяющей шаблону2, включительно.
В языке awk предусмотрены два специальных шаблона - BEGIN и END. Первый описывает действия, выполняемые перед началом чтения файла, второй - действия, выполняемые после окончания чтения.
Действия
Язык описания действий awk почти идентичен языку программирования C.
Операции:
+ - * / % ++ -- в постфиксной и префиксной формах = += -= *= /= % = < <= > >= == != ! && ||
Оператор, последняя операция в котором является операцией присваивания, является оператором присваивания.
Операторы, управляющие потоком вычисления:
if (условие) оператор [else оператор] while (условие) оператор for (выражение; условие; выражение) оператор в отличие от языка C, в выражениях цикла for не допускается перечисление через запятую break continue next немедленный переход к следующей строке файла exit выход из программы
Операторы вывода:
Оператор завершается символом ";" или переводом строки. Если оператор будет продолжен на следующей строке, первая строка должна завершаться символом "\"
Любая последовательность операторов, заключенная в фигурные скобки "{ ... }" является составным оператором.
Комментарий имеет тот же вид, что и в языке C: "/* ... */", в отличие от С, комментарии можно вставлять только между операторами, но не в середину оператора.
Функции:
length(arg) | Возвращает длину arg. Если arg не указан, то выдает длину текущей строки. |
exp(), log(), sqrt() | Математические функции: экспонента, логарифм, квадратный корень. |
int() | Возвращает целую часть числа. |
substr(s,m,n) | Возвращает подстроку строки s, начиная с позиции m, всего n символов. Если n не задано - до конца строки. |
index(s,t) | Возвращает начальную позицию подстроки t в строке s. (Или 0, если t в s не содержится.) |
sprintf(fmt,exp1,exp2,...) | Форматированная печать в строку, идентично printf(). |
split(s,array,sep) | Помещает поля строки s в массив array и возвращает число заполненных элементов массива. Если указан sep, то при анализе строки он понимается как разделитель. |
Язык программирования awk допускает использование:
Ссылки на поля обрабатываемой строки возможны по именам: $1, $2, $3 ... Имя $0 - ссылка на всю строку.
В языке awk предопределены следующие стандартные переменные:
FILENAME | Имя текущего обрабатываемого файла |
FS | Разделитель полей во входной строке |
NF | Число полей во входной строке |
NR | Номер текущей входной строки |
OFS | Разделитель полей в выходной строке |
ORS | Разделитель записей в выходном файле |
Пользовательские переменные не требуют объявления, они автоматически объявляются при их появлении в программе. Переменные могут интерпретироваться как числовые или строковые, интерпретация выполняется в зависимости от контекста использования переменной.
Массивы также не объявляются, а принимают значения из контекста. Массивы в скрипте awk являются динамическими, то есть, новые элементы добавляются в массив по мере необходимости. Индексом в массиве может быть как числовое, так и строковое значение.
СМ.ТАКЖЕ |
|
grep, sed. |