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

Проблема в следующем. Как отделить признак “пола” от фамилии?

Программа.

awk ‘{BEGIN { FIELDWIDTHS==1 7 1 4 1 2} {if ($1==1)

{print $2,$4 “is male” $6 “years old.” else

print $2,$4 “is female” $6 “years old.”

}

}

}’ file.me

21

Здесь 1 – первое поле длиною 1;

7 – второе поле длиною 7 (фамилия, запятая и пробелы);

1 – третье поле длиною 1 (пробел);

4 – четвертое поле длиною 4 (имя);

1 – пятое поле длиною 1 (пробел);

2 – шестое поле длиною (возраст).

Внимание!

При использовании FIELDWIDTHS нельзя забывать ни об одном разделителе поля. Учитываются все пробелы между словами22.

IGNORECASE - управляет зависимостью регулярного выражения от регистра.

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

По умолчанию значение этой переменной равно нулю, то есть операции

с регулярными выражениями зависят от регистра.

23

Взаимодействие с интерпретатором

Вопрос в следующем, как передать программе на awk значения переменных из командной строки?

Способ 1.

Аргументы командной строки доступны в awk посредством встроенного массива ARGV. Переменная ARGC определяет количество аргументов в командной строке.

24

Пример 1.

awk –f programfile In.file

В данном случае массив ARGV будет иметь следующие значения:

ARGV[0] – awk ARGV[1] – In.file ARGC = 2

Так как не существует аргумента опций, то programfile не считается аргументом.

Если бы в командной строке была опция

–F,”, то массив ARGV не содержал бы

 

также запятой.

25

Способ 2.

Для передачи значений переменных надо присвоить значения этим переменным, то есть необходимо или в командной строке или в файле shell определить переменные и их значения.

awk –f programfile In.file X=1 FS=,

Пример 2

Сочетание программы shell и awk. Программа вводит значение переменной TZ в программу awk.

26

echo $TZ

awk ‘/^”TZ”/ {print $1,$2}’ file.me TZ=”abcd”

Способ 3.

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

Hапример, в конвейере who | field 1

будет печататься список имен, под которыми

пользователь входит в систему.

27

Язык awk может явно предоставлять возможность выбора полей. Hаша задача - передать номер N программе awk.

Вариант 1.

awk ‘{print $ '$1'}’

Здесь $1 открыто (не внутри каких-либо кавычек), и поэтому становится номером поля, доступным в программе awk.

Вариант 2.

awk '{print \$$1}’

Аргумент обрабатывается интерпретатором и поэтому \$ становится просто $, а $1 заменяется на значение N 28

Пример 3.

Создать программу addup, которая суммирует значение N-го поля.

awk ‘{ S+= $'$1'} END {print S }’

Пример 4.

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

29

awk '{

BEGIN { N = '$1'}

{

for ( i = 1; i <= N; i++) Sum[i] += $i

}

END {

for ( i = 1; i <= N; i++) printf "%6g ", Sum[i]

Total += Sum[i]

 

}

 

printf "; Total = %6g

", Total

}'

30

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