Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ОС.doc
Скачиваний:
17
Добавлен:
05.11.2018
Размер:
2.06 Mб
Скачать

Печать форматированного файла

Для вывода форматированного файла awk обеспечивает Си-подобное выражение printf:

printf format, expr1, expr2, ..., exprn

которое печатает expr в соответствии со спецификацией в строке format. Например, программа awk:

{printf "%10s %6d\n", &1, $3}

печатает первое поле ($1) как строку из 10 символов, затем пробел, третье поле ($3) как десятичное число в «шестисимвольном» поле, затем новая строка (\n).

Если в качестве вводного взять файл countries, то программа напечатает следующую таблицу:

USSR 262

Canada 24

China 866

USA 219

Brazil 116

Australia 14

India 637

Argentina 26

Sudan 19

Algeria 18

printf не проставляет автоматически в выводном файле разделителей. Вы должны создать их сами, указав "\n" в формате спецификации.

Простые шаблоны

Вы можете выбрать определенные записи для печати или другой обработки с использованием простых шаблонов. awk имеет три вида шаблонов. Первое - это шаблоны, называемые выражениями отношений, которые проводят сравнения. Например, оператор "==" тестирует на равенство. Чтобы напечатать строки, для которых 4-е поле равно строке "Asia", можно использовать программу, состоящую из одного шаблона:

$4 == "Asia"

Если в качестве вводного файла взять countries, то получим:

USSR 8650 262 Asia

China 3692 866 Asia

India 1269 637 Asia

Для сравнения используются: >, >=, <, <=, ==, != (не равно). Сравниваться могут числа и строки. Например, из нашего файла мы хотим распечатать только страны, население которых более 100 млн. Для этого введем:

$3 > 100

Получим печать всех строк, в которых третье поле более 100.

В качестве шаблонов могут использоваться регулярные отношения, которые позволяют осуществлять поиск указанных символов для выбора записей. Простейшей формой регулярного отношения является строка символов, обрамленная наклонными чертами:

/US/

Эта программа печатает каждую строку, которая содержит буквы US. Если в качестве вводного файла взять countries, то получим:

USSR 8650 262 Asia

USA 3615 219 North America

Третье - специальные шаблоны BEGIN и END могут использоваться для получения управления пред считыванием первой входной строки и после считывания последней. BEGIN должен быть первым шаблоном, а END - последним. Эта программа использует BEGIN для печати заголовка:

BEGIN {print "Countries of Asia:"}

/Asia/ {print " ", $1}

На выходе получим:

Countries of Asia:

USSR

China

India

Простые действия

В этом подразделе описаны встроенные и определенные пользователем переменные и функции простых действий.

Встроенные переменные

Кроме чтения вводного файла и разбиения на поля, awk считает число считанных записей и число полей внутри текущей записи. Вы можете использовать эти счетчики в программе awk. Переменная NR - это номер текущей записи, NF - число полей в записи. Так программа:

{print NR, NF}

печатает номер каждой строки и число полей в этой записи. А программа:

{print NR, $0}

печатает каждую запись с соотвествующим номером в начале.