awk

Итоговое краткое описание awk

Командная строка

        awk programm filenames
        awk -f programm-file filenames
        awk -Fs sets field separator to string s
        awk -Ft sets separator to tab

Шаблоны

        BEGIN
        END
        /regular expression/
        relational expression
        pattern && pattern
        pattern || pattern
        (pattern)
        !pattern
        pattern, pattern

Операторы управления потоком

        if (expr) statement [else statement]
        if (subscript in array) statement [else ...

Примеры использования

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

Использование awk с другими командами и с shell

Наибольшего эффекта awk достигает при использовании с другими программами. В этом подразделе обсуждаются некоторые способы взаимодействия программ awk с другими командами.

10.25.1. Функция system

Встроенная функция system (command_line) выполняет команду "command_line", которая может быть строкой, вычисляющей, например, sprintf. Функция system возвращает состояние выполненной команды.

Например:

             $1 == "#include" { gsub (/[<>"]/, $2;
             system ("cat " $2}

вызывает ...

Аргументы командной строки

В программе awk могут использоваться аргументы командной строки: массив ARGV содержит элементы ARGV[0], ... ARGV[ARGC-1], где ARGC - счетчик, ARGV[0] - имя программы (в общем случае - awk), остальное - любые поддерживаемые аргументы, исключая программы и необязательные аргументы).

Следующая командная строка содержит программу awk, отражающую аргументы, которые появляются после имени программы:

        awk '
        BEGIN  {
                for ( i = 1; i < ARGC; i++ )
                     printf "%s ", ARGV[i]
                ...

Функция getline

Способность awk автоматически разбивать вводной файл на записи длиной более чем одна строка, не отвечает требованиям некоторых задач. Например, если записи разделены не пустыми строками, а чем-нибудь другим, то установка RS в ноль не работает. В таком случае программа должна управлять разбиением каждой записи на поля. Здесь дано несколько советов.

Функция getline может быть использована для чтения ввода либо из текущего вводного файла, либо из файла или канала, перенаправленного аналогично printf.

getline вызывает следующую вводную запись и ...

Ввод

Наиболее общим способом подачи ввода программе awk является указание в командной строке имен вводных файлов. Но существуют и другие способы. Они описываются в этом подразделе.

10.21.1. Файлы и каналы

Вы можете поместить вводимые данные в файл, указать
awkdata и затем выполнить:

	awk 'программа' awkdata 

Если не указано имя файла, то awk читает из стандартного файла ввода. Например, egrep выбирает вводные строки, содержащие указанное регулярное выражение, которое может сделать это быстрее, чем awk, т.к. выполняет ...

Вывод

Операторы print и printf являются простейшими конструкциями, которые генерируют вывод. Оператор print используется для образования просто вывода; printf - для форматируемого вывода. Подобно shell awk позволяет вам перенаправлять вывод в файл или в канал.

10.20.1. Оператор print

Оператор:

	print expr1, rxpr2, ..., exprn 

печатает строки каждого выражения, разделенные при помощи разделителей полей и следующими за ними разделителями записей.

Оператор:

	print 

является сокращенной формой ...

Комментарии

В программе awk могут присутствовать комментарии. Они начинаются с символа # и заканчиваются символом новой строки:

	print x,y # это комментарий 

Операторы обычно занимают одну строку. Несколько операторов могут располагаться на одной строке, тогда они должны разделяться точкой с запятой. Длинный оператор может располагаться на нескольких строках, причем каждая продолжаемая строка должна заканчиваться символом "\". Нельзя продолжить строку вида "....". Такое продолжение встречается редко, однако как только ...

Функции, определенные пользователем

awk поддерживает функции, определенные пользователем:

         function имя( список_аргументов) {
                      операторы
         }

Это определение может появляться в любом месте, где возможен оператор "шаблон-действие". Список аргументов - это список имен переменных, разделенных запятыми. Внутри тела функции эти переменные ссылаются на действительные переменные при вызове функции. Между именем функции и левой круглой скобкой не должно быть пробела, иначе это будет означать конкатенацию.

Массив элементов просматривается ...

Массивы

awk поддерживает одномерные массивы. Массивы и элементы массивов нет необходимости объявлять. Индексы массива могут быть числом или строкой. Пример условного обозначения числового индекса:

	x[NR] = $0

присваивает текущую строку вводного файла элементу NR
массива x.

Фактически возможно считать целый вводной файл в массив
с помощью программы awk:

              { x[NR] = $0 }
        END   { ... обработка ...}

Первое действие только записывает каждую строку вводного файла, отмеченную номером строки, в массив x, ...

Ленты новостей