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

Например, пусть у нас имеется файл с именем cars.file, содержащий:

-в первом поле название фирмы,

-во втором - название марки автомобиля и

-в третьем - его цену.

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

awk `{print $2 "," $1 "Tab" $3}` cars.file

где "Tab" - знак табуляции (то есть, нажатие на клавишу "Tab").

В этом примере мы сначала выводим на экран марку автомобиля, потом его фирму и

только потом цену.

11

Причем при выводе на экран между наименованием марки и наименованием фирмы будет стоять знак запятой, а между фирмой и ценой - знак табуляции.

ПРИМЕЧАНИЕ!

a)Если в операторе-шаблоне и операторе- действии содержатся специальные символы, то эти символы должны быть заключены в апострофы.

b)Открывающая фигурная скобка "{" оператора-действия должна находиться в той же строке, что и связанный с ней

шаблон.

12

c) Оператор print “” печатает пустую строку, о оператор print печатает текущую строку ввода.

Обычно предполагается, что поля в

записи разделяются специальным символом ( обычно это пробел или табуляция), причем количество

одновременно разделяющих символов может быть произвольным.

13

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

Один из способов состоит в задании в командной строке опции -F.

Тогда, к примеру, для печати первого поля в файле, где разделителями является символ двоеточия (:), можно применить команду:

awk -F: '{print $1}' file.my

14

Второй способ переопределения

разделителя полей - это использование

встроенной переменной FS. Например, FS = ":";

Обработка пробелов и символов табуляции здесь особая. По умолчанию и

пробелы и символы табуляции служат разделителями, а разделители в начале строки отбрасываются.

15

Однако, если в качестве разделителя

определен не пробел, то разделители в начале строки учитываются при определении полей.

В частности, если используется символ табуляции, то пробелы не являются

символами-разделителями и поэтому

пробелы в начале строки входят в поле, и

каждый символ табуляции определяет поле.

16

2. Выполнение команд из входного файла

Чтобы не набирать каждый раз команды,

как только что в приведенном (ранее) примере, можно поместить операторы в отдельный файл, сделать файл выполняемым, а затем активизировать этот файл в командной строке awk с помощью опции -f.

17

Тогда предыдущий пример можно выполнить так:

cat > file.awk

 

{print $2 "," $1 "Tab" $3}

CTRL-D

# Это ввод строки в файл file.awk

причем операторы-действия вводятся без апострофов.

awk -f file.awk cars.file

# Запуск программы file.awk

( для того, чтобы сделать файл выполняемым, надо выполнить команду chmod +x file.awk )

Результат выполнения этого примера будет аналогичен предыдущему.

18

Итак, выполнение команд из файла необходимо делать в следующей последовательности:

Поместить команды в файл.

Придать файлу с командами статус выполняемого.

Активизировать этот файл с опцией -f.

Необходимо помнить, что операторы

действия в файле должны быть без апострофов.

19

Если в одной строке несколько операторов-

действия, то они должны разделяться символами

";".

Если в в каждой строке располагается только один оператор, то символ ";" можно опускать.

3.Печать

Вкоманде awk доступна и другая информация. Встроенная переменная NR хранит номер текущей входной записи, то есть номер текущей строки.

Поэтому для вставки номера строки перед строкой входного потока достаточно задать значение этой переменной:

awk '{print NR, $0}'

20