Ввод и вывод данных
В общем случае в команде 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)}