Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_ПСРВ.doc
Скачиваний:
32
Добавлен:
12.02.2016
Размер:
1.6 Mб
Скачать

1.3. Действия

Язык описания действий awk почти идентичен языку программирования C.

Операции:

Операции как в Си

=, +=, -=, *=, /=, %=, +, /, %, ++, --.

Сравнения чисел, если оба числа, иначе - строк

<, <=, ==, !=, >=, >

Логические операции

!, ||, &&

Операция "пробел"

конкатенация.

Оператор, последняя операция в котором является операцией присваивания, является оператором присваивания.

Операторы, управляющие потоком вычисления:

if (условие) оператор

[else оператор]

while (условие) оператор

for (выражение; условие; выражение) оператор

в отличие от языка C, в выражениях цикла for не допускается

перечисление через запятую

break

continue

next немедленный переход к следующей строке файла

exit выход из программы

Операторы вывода:

print список_выражений

выводит значения выражений, перечисленных в списка. Если в списке выражения находятся через запятую, то значения этих выражений выводятся на output (печатаются) через символ-разделитель OFS (по умолчанию пробел). Если же выражения стоят через пробел, то на печати происходит их конкатенация. Если указано имя файла, то само его присутствие означает печать в файл. Если вместо ``> '' стоит ``> > '', то это означает добавление к уже существующему файлу. Можно использовать в одной программе максимально до 10 output файлов.

printf (...) - полный аналог одноименной функции языка C.

Оператор завершается символом ";" или переводом строки. Если оператор будет продолжен на следующей строке, первая строка должна завершаться символом "\"

Любая последовательность операторов, заключенная в фигурные скобки "{ ... }" является составным оператором.

Комментарий имеет тот же вид, что и в языке C: "/* ... */", в отличие от С, комментарии можно вставлять только между операторами, но не в середину оператора.

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

Иванов И.И.

1980

50

Петров А.В.

1979

40

Сидоров С.К.

1979

40

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

1970

60

Примеры:

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

Результат: Иванов И.И. 1980 50 Петров А.В. 1979 40 Сидоров С.К. 1979 40 Хведоров И.Х. 1970 60 awk '/до/ {print}' f-awk # выдает строки, где есть "до".

Результат: Сидоров С.К. 1979 40 Хведоров И.Х. 1970 60

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

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

и

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

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

Результат:

Сидоров С.К. 1979 40 Хведоров И.Х. 1970 60

awk '/до/ {print("Привет!")}' f-awk Результат:

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

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

Команда "awk" выведет вторые поля (благодаря позиционной переменной "$2") строк, содержащие "до". (Кстати, позиционная переменная "$0" соответсвует всей строке).

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

С.К.

И.Х.

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

В этм случае, благодаря флагу "-F" стандартные разделители заменены на символ "0", т.е. теперь выбранные строки воспринимаются, как разбитые на следующие поля:

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

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

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

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

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

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

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

6