Операционные системы - статьи

         

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


В общем случае в команде awk может быть указано несколько

файлов. Напомним форматы вызова команды:

awk [-Fc] 'prog.awk' [file ...]

awk [-Fc] -f prog.awk [file ...]

^

Файлы обрабатываются последовательно в указанном

порядке. Это можно использовать для "настройки" awk

команды при обработке последующих файлов.

Пусть файл "f0" имеет вид:

60 Сидоров

А файл awk-программы "prim.awk" имеет вид:

FILENAME == "f0" { # если просматривается файл "f0"

w1 = $2 # присваиваются значения переменным

w2 = $1 # w1 - Сидоров, w2 - 60

}

$1 == w1 { print ("фамилия: "$1)} # означенные переменные



$4 == w2 { print ("годы: " $4)} # используются в

# селекторах

Тогда при вызове команды

awk -f prim.awk f0 f-awk

Результат:

фамилия: Сидоров

годы: 60

То есть второе поле файла "f0" дает значение

переменной "w1", а первое - "w2". Эти переменные

используются в селекторах при обработке файла "f-awk".

Изменим программу в файле "f-awk":

FILENAME == "f0" {

w1 = $2

w2 = $1

next

}

{ print ("фамилия: "$1); next}

$4 == w2 { print ("годы: " $4)}

Результат:

фамилия: Иванов

фамилия: Петров

фамилия: Сидоров

фамилия: Хведоров

Если исключить первый оператор "next",

то в выходном файле появится дополнительно первая строка:

фамилия: 60

поскольку выбирается снова первое поле в певом файле

("f0"). Если исключить и второй "next", то

в выходном файле появится дополнительно последняя строка:

годы: 60

которая ранее не выводилась, так как в предшествующий

оператор " { print ("фамилия: "$1)}" заканчивал

работу на ПОСЛЕДНЕЙ строке файла "f-awk", поэтому "next"

пропускал последующую командную строку

$4 == w2 { print ("годы: " $4)}

И еще одна модификация в связи с вводом данных с

терминала. Вызов команды будет:

awk -f prim.awk f0 f-awk

А файл "prim.awk" примет вид:

BEGIN { print ("Введите годы и фамилию: ")}

FILENAME == "-" {

w1 = $2

w2 = $1

next

}

$1 == w1 { print ("фамилия: "$1); next}

$4 == w2 { print ("годы: " $4)}



Содержание раздела