Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компьютерные сети / Комп сети 5_awk.ppt
Скачиваний:
25
Добавлен:
22.02.2016
Размер:
167.42 Кб
Скачать

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

Напоминание:

print “” печатает пустую строку, а

print без аргументов печатает текущую строку ввода.

21

Для полного контроля над выходным потоком используется оператор printf,

сходный с аналогичной функцией в языке

Си.

Например, в строке

awk '{printf "%4d %s\n", NR,$0}'

выражение %4d задает поле в четыре цифры для вывода целого NR в десятичном представлении,

а выражение %s - строка символов для

вывода $0 и \n - символ перевода строки ( он нужен, так как printf не задает

автоматически пробелы или символы

перевода строк).

22

За каждым оператором print или printf может следовать символ > и имя файла

(в виде строки в кавычках или переменной). В этом случае выходной поток будет направлен в этот файл.

Может использоваться и символ >> для

дописывания в файл.

4.Шаблоны

А.Наиболее типичное использование шаблонов в программе awk сводится к задачам простой проверки данных, обычно это поиск строк, удовлетворяющих и неудовлетворяющих некоторому условию23 .

Если нет выходного потока, то считается, что данные удовлетворяют соответствующему критерию.

Например, шаблон для проверки - является ли второе поле строки пустым - может выглядеть следующим образом:

$2 = "" второе поле пусто $2 !~/./ второе поле не содержит ни одного символа

length ($2) == 0 длина второго поля

равна нулю.

24

Символ ~ обозначает соответствие регулярному выражению, а символы !~ - отсутствие соответствия.

Само регулярное выражение заключено в символы дробной черты (слеши).

Соответствие можно записывать несколькими способами.

1. Заключение строки в символы наклонной черты.

Например, /Anna/ или /"Anna"/

25

Причем необходимо помнить, что это разные шаблоны.

В первом шаблоне ищется просто слово Anna, а во втором - слово Anna, заключенное в двойные кавычки.

Поиск будет удачен при нахождении шаблона в любом месте строки ввода.

Причем, никакие знаки отмены не используются.

26

2. Операция ~ (соответствие) Например,

$2 ~ /mm/

или $2 ~ "mm"

Соответствие с шаблоном имеет место, когда проверяемое поле содержит подстроку в правой части.

В данном примере отыскивается соотвествие mm в любом месте второго поля.

27

3. Операция !~ (не соответствие) Например, $2 !~ /mm/

Данный пример соответствует всем записям ввода, которые не содержат mm

где-либо во втором поле.

Примечание:

 

/Anna/

эквивалентно

$0 ~ /Anna/

28

В шаблонах можно применять метасимволы, как и в функции grep:

.- любой символ;

*

-

любое число повторений

предыдущего символа;

^

-

начало слова или строки;

$

-

конец слова или строки.

Внимание!

Не путать метасимволы шаблонов и метасимволы командной строки - "*" и "?".

29

A. Шаблоны BEGIN и END

Программа awk имеет два специальных шаблона: BEGIN и END.

Действие, соответствующее BEGIN, выполняется прежде, чем читается первая входная строка.

Его можно использовать для инициации переменных, печати заголовков или для установки символа разделения полей,

присваивая его переменной FS.

30

awk 'BEGIN { FS=":"} $2 == "" ' file.my

Здесь в файле file.my проверяется в каждой строке на пустоту второго поля.

Действия, указанные в шаблоне END, выполняются после обработки последней входной строки:

awk 'END {print NR}' .....

Здесь печатается число строк входного потока.

31

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