1. Язык AWK
AWK - утилита предназначенная для простых, механических и вычислительных манипуляций над данными. Довольно несложные операции часто необходимо выполнить над целыми пакетами файлов, а писать для этого программу на одном из стандартных языков программирования является утомительным и, как правило, не очень простым делом. Оптимальное решение проблемы - использование специальной утилиты AWK, включающей в себя не громоздкий и удобный язык программирования, позволяющий решать задачи обработки данных с помощью коротких программ, состоящих из двух-трех строк.
Утилита AWK изначально объединяла свойства утилит UNIX - sed и grep. В дальнейшем ее возможности значительно расширились. Настоящая документация ограничивается описанием возможностей утилиты AWK реализованной для компьютеров CONVEX. Утилита AWK была создана в 1977г, американскими авторами: Alfred V.Aho, Brian W.Kernighan и Peter J.Weinberger. Подробное описание всех возможностей утилиты AWK для UNIX дает их издание: ``The AWK Programming Language'', 1988.
AWK сканирует input (стандартный или указываемый набор файлов), и над строками, удовлетворяющими заданному образцу, выполняет указываемые действия. Строка может содержать максимально до 256 символов.
Формат:
awk [-Fc] [-f file] [files]
awk [-Fc] [prog] [files]
prog - программа, вида: ' образец ${$действие$}$'
file - файл с AWK-программой:
образец { действие}
образец { действие}
...
files - файлы, предназначенные для AWK-обработки.
-Fc - устанавливает разделитель полей в ``с'' (См. 1.2.1 и 2.4)
В начало страницы
1. Язык программирования AWK допускает использование:
- Полей;
- Переменных (Стандартных, Массивов);
- Арифметических выражений.
2. Образец:
- Регулярное выражение;
- Выражение отношения;
- Комбинация образцов;
- BEGIN и END.
3. Действие:
- Последовательность предложений, разделенных ``;'' или ``\n'' (новая строка)
Предложение:
- Вывод (Печать);
- Присваивание;
- Встроенная функция;
- Управляющая структура.
В начало страницы
Каждая сканируемая строка input рассматривается как состоящая из полей, разделенных разделительными символами (по умолчанию - пробел).
На поля можно ссылаться из AWK программы следующим образом:
- $1 - Первое поле;
- $2 - Второе поле;
- ... и так далее...
- $0 - Ссылается на всю строку целиком.
Строка может содержать максимально до 100 полей.
< Drawing or tabular insertion skipped...>
В начало страницы
Переменные могут интерпретироваться как числовые или строковые. Они принимают значения в зависимости от контекста, например:
x = 1, x воспринимается как число;
x = " ", x - строка;
x + "abc" - результат операции интерпретируется как число независимо от того, было ли х числом или строкой. Если строка не может быть интерпретирована как число ("abc"), то ее значение становится 0.
Строка может содержать максимально до 256 символов.
Ссылки на поля $1, $2, ... могут интерпретироваться в качестве переменных, например:
$1 = "3" + $2 - первое поле принимает значение второго поля, увеличенного на 3.
$(i+1) - интерпретируется как поле, номер которого зависит от значения переменной i.
В начало страницы
Допускается использование массивов. Массивы не объявляются, а принимают значения из контекста, например:
x[NR] = $0 - элементу массива x, индексированному NR, присваивается обрабатываемая строка.
x["apple"] - элементы массива могут индексироваться не числовым значением, т.е. строкой.
Выражение:
- Переменная;
- Число;
- Строка;
- Встроенная функция;
- Выражение < Операция> Выражение.
< Операция> : "+", "-", "*", "/", "%"