Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Оба элемента являются необязательными. Если отсутствует шаблон (pattern), процедура (procedure) применяется ко всем строкам. Если отсутствует процедура, отображается строка, соответствующая шаблону. По умолчанию каждая строка ввода считается записью, но можно переопределить разделитель записей через переменную RS.

Шаблоны
Шаблонами считаются конструкции вида:
/regular expression/ relational expression pattern-matching expression pattern,pattern BEGIN END
Существуют некоторые правила, применяемые к шаблонам:
• Выражение может состоять из строк, заключенных в кавычки, чисел, операторов, функций, определенных переменных или любых предопределенных переменных, описанных далее в разделе «Системные переменные gawk».

Регулярные выражения используют расширенный набор метасимволов и описаны в главе 9 «Шаблоны и поиск».
Кроме того, символы" и $ могут использоваться для привязки к началу или концу поля (а не записи в целом), соответственно.
В выражениях отношения (relational expressions) используются операторы отношений, описанные далее в разделе «Операторы». Сравнивать можно и строки и числа. Например, выражение $2 > $1 выбирает строки, в которых второе поле длиннее первого.
В шаблонах поиска (pattern-matching expressions) используются операторы ~ (совпадение с шаблоном) и !- (несовпадение с шаблоном). См. раздел «Операторы» далее в этой главе.
Шаблон BEGIN позволяет определить процедуры, которые выполняются до обработки первой строки ввода (как правило, эта возможность используется для установки значений переменных).


Шаблон END позволяет определить процедуры, которые выполняются после чтения последней записи ввода.
Если в сценарии присутствуют несколько шаблонов BEGIN и END, то соответствующие им действия выполняются в порядке следования шаблонов.

• Шаблон eudapattern,pattern задает диапазон строк. В этом случае BEGIN или END нельзя задавать в качестве шаблонов.
Шаблоны, за исключением BEGIN и END, можно комбинировать с помощью логических операторов || (ИЛИ), && (И) и ! (НЕ).
В дополнение к регулярным выражениям поддерживает и списки
символов стандарта POSIX, что позволяет производить поиск по не-ASCII символам языков, отличных от английского. Такие списки задаются диапазонами символов, заключаемыми в квадратные скобки [ ]. Например, [[:1о-
wer:]] является эквивалентом [a-z] в английском языке. Таблица для списков символов POSIX приводится в главе 9.

Процедуры
Процедура состоит из одной или более команд, функций, присваиваний переменных, разделяемых точкой с запятой или символом новой строки. Процедура заключается в фигурные скобки. Команды делятся на четыре группы:
Инициализация переменных и массивов
Команды отображения

• Встроенные функции •Команды управления обработкой
Простые примеры комбинаций шаблон-процедура
Отобразить первое поле каждой строки (шаблон не задан): { print $1 >
Отобразить все строки, содержащие «Linux»: /Linux/
Отобразить первое поле каждой строки, содержащей «Linux»: /Linux/ { print $1 }
Отобразить записи, содержащие более двух полей: NF > 2
Считать разделителями записей пустую строку, т. е. объединять идущие подряд строки в одну запись:

BEGIN { FS = "\n"; RS = "" }
6. Отобразить поля 2 и 3 в обратном порядке, но только для строк, первое
поле которых является строкой «URGENT»:
$1 " /URGENT/ { print $3, $2 }
Подсчитать и отобразить количество вхождений строки «ERR»: /ERR/ { ++x } END { print x }
Сложить числа второй колонки таблицы и отобразить сумму: { total += $2 }; END { print "column total is", total }
Отобразить строки, длина которых меньше 20 символов: lengthO < 20

10. Отобразить все строки, начинающиеся с подстроки и содержа-
щие ровно семь полей:
NF == 7 && /"Name:/
11. Изменить порядок следования полей на противоположный:
{ for (i = NF; i >= 1; i--) print $i }

Системные переменные gawk
Переменная
Описание

$n
Поле текущей записи, имеющее порядковый номер п; поля разделяются символом FS

$0
Вся запись

ARGC
Количество аргументов командной строки

Переменная
Описание

ARGIND
Порядковый номер текущего файла в командной строке (начиная с 0)

ARGV
Массив, содержащий аргументы командной строки

CONVFMT
Формат преобразования для чисел (по умолчанию % .6g)

ENVIRON
Ассоциативный массив переменных окружения

ERRNO
Описание последней системной ошибки

FIELD WIDTHS
Список длин полей (разделенный пробелами)

FILENAME
Имя текущего файла

FNR
Аналогично NR, но относительно текущего файла

FS
Разделитель полей (любой пробельный символ по умолчанию; пустая строка разделяется на отдельные символы)

IGNORECASE
Если значение переменной - истина (true), то поиск не чувствителен к регистру

NF
Количество полей в текущей записи

NR
Номер текущей записи

OFMT
Формат отображения чисел (по умолчанию %

OFS
Разделитель полей при отображении (пустой по умолчанию)

ORS
Разделитель записей при отображении (новая строка по умолчанию)

RLENGTH
Длина строки, найденной функцией match

RS
Разделитель записей (по умолчанию - символ новой строки)

RSTART
Адрес первого символа соответствия шаблону в строке, найденной функцией match

SUBSEP
Символ-разделитель индексов массивов (по умолчанию \034)

Операторы
В приводимой далее таблице перечислены операторы gawk в порядке возрас-
тания приоритета:
Символы
Значение

= += -= *= /= X»
~ — * * —
Присваивание

?;



   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru