II. Язык обработки шаблонов awk

Структура awk-программы

Вызов awk

awk-переменные и выражения

Примеры awk-программ

Селекторы

Еще примеры

Действия

Ввод и вывод данных

Встроенные функции

awk - команда контекстного поиска и преобразования текста. Она - фильтр. Ее можно рассматривать как оболочку "awk" в оболочке "shell".

1. Структура awk-программы

Программа состоит из операторов (правил), имеющих вид:

шаблон {действие}

шаблон {действие}

. . .

Частные случаи:

{действие} - когда действие выполняется для всех строк.

шаблон - когда выводятся строки с данным шаблоном.

Действие может состоять из последовательности операторов, разделяемой ";" или переводом строки или закрывающей скобкой.

Возможны комментарии (как в shell "#.........").

Пример: Для дальнейших примеров возьмем входной файл "f-awk" ( фамилия инициалы год-приема-на-работу возраст ):

Иванов И.И.

1980

50

Петров А.В.

1979

40

Сидоров С.К.

1979

40

Хведоров И.Х.

1970

60

awk '{print}' f-awk # выдает весь текст;

echo

awk '/до/ {print}' f-awk # выдает строки, где есть "до".

echo

awk '/до/ {}' f-awk # выдает строки, где есть "до"

echo

awk '/до/ {print("Привет!")}' f-awk

Результат:

Иванов И.И. 1980 50

Петров А.В. 1979 40

Сидоров С.К. 1979 40

Хведоров И.Х. 1970 60

Сидоров С.К. 1979 40

Хведоров И.Х. 1970 60

Сидоров С.К. 1979 40

Хведоров И.Х. 1970 60

Привет!

Привет!

Существует два оператора специального вида ("BEGIN"-начальные установки и "END" - "последействия"):

BEGIN {действие}

шаблон {действие}

шаблон {действие}

. . .

END {действие}

2. Вызов awk

Возможны два основных варианта:

1) awk [-Fc] 'prog.awk' [files]

Это простейший случай, когда программа (заключенная в кавычки " ' ") находится в теле команды, "-Fc" - флаг, меняющий стандартный разделитель полей на "c" "file" - имя файла исходных данных, при его отсутствии - со стандартного входа. (Этот формат использован в начальных примерах).

cat f-awk | awk '/до/ {print}'

и

awk '/до/ {print}' < f-awk

дают результат, аналогичный

awk '/до/ {print}' f-awk

Для демонстрации действия флага "-Fc" рассмотрим вызовы:

awk '/до/ {print($2)}' f-awk

awk -F0 '/до/ {print($2)}' f-awk

На экран будет выведено:

С.К.

И.Х.

6

Первая команда "awk" выведет вторые поля (благодаря позиционной переменной "$2") строк, содержащие "до". (Кстати, позиционная переменная "$0" соответсвует всей строке). Во втором случае, благодаря флагу "-F" стандартные разделители заменены на символ "0", т.е. теперь выбранные строки воспринимаются, как разбитые на следующие поля:

Сидоров С.К. 1979 40

---------------------^--------------------

1-е поле 2-е поле (пусто)

Хведоров И.Х. 1970 60

-----------------^---^--------------------

1-е поле 2-е 3-е поле (пусто)

2) awk [-Fc] -f prog.awk [files]

Флаг "-f" говорит о том, что awk-программу надо брать из файла, имя которого указано следом (имя может быть произвольным и расширение ".awk" добавлено здесь просто из эстетических соображений).

Соседние файлы в папке материалы к собеседованию