- •Условная выборка строк
- •Составные шаблоны
- •Примеры.
- •А) Программа
- •Б) Программа
- •Пример.
- •Операторы в awk
- •При выполнении более, чем одного оператора в оператор_1 или в оператор_2 необходимо их
- •Б) Цикл for аналогичен в языке Си, но отличается от цикла в языке
- •В) Цикл while
- •Е) Опереатор next вызывает чтение следующей входной строки и сопоставление ее с шаблонами
- •Пример:
- •Дополнительные переменные
- •Пример.
- •FLENGTH - хранит значение длины строки сопоставления, производимого
- •ENVIRON - массив, содержащий значения текущих переменных окружения.
- •CONVFMT - формат преобразования чисел. Ее значение по умолчанию - %6g.
- •Если она определена, то считается, что
- •Значения переменной FIELDWIDTHS – числа, разделенные пробелами или табуляцией, поэтому поля не обязательно
- •Проблема в следующем. Как отделить признак “пола” от фамилии?
- •Здесь 1 – первое поле длиною 1;
- •IGNORECASE - управляет зависимостью регулярного выражения от регистра.
- •Взаимодействие с интерпретатором
- •Пример 1.
- •Способ 2.
- •Язык awk может явно предоставлять возможность выбора полей. Hаша задача - передать номер
- •Пример 3.
- •Здесь шаблон BEGIN используется для засылки значения в переменную N, чтобы не засорять
- •Здесь нет никаких возможностей
- •Функции
- •Список аргументов идет через запятые. Это переменные, что используются внутри функции.
- •Параметры функции передаются по значению, то есть действительные
- •Результат будет: 5 5
- •Локальные переменные
- •Глобальные переменные
- •Обращение к функциям
- •Для этого необходимо выполнить: system (value)
- •Тогда программа на awk будет иметь вид:
- •CGI программирование с применением shell и awk
- ••методы:
- •Пример 1.
- •echo “It is now `date`”
- •Пример 2.
- •Здесь:
- •Примеры:
- •Для метода GET наиболее важна переменная QUERY_STRING, содержащая в
- •Для распознавания метода передачи
- •Но в силу того, что браузер передает информацию из формы в закодированном виде,
- •Пример:
В) Цикл while
while ( условие ) { операторы }
Г) Оператор break вызывает немедленный выход из цикла while или for.
Д) Оператор continue инициирует переход к следующему шагу цикла
(к условию в операторе while или
к выражению_2 в опереторе for).
11
Е) Опереатор next вызывает чтение следующей входной строки и сопоставление ее с шаблонами в начале программы awk.
Ж) Оператор exit [статус] вызывает
немедленный переход на действия, определенные в шаблоне END.
Если шаблона END нет или в нем есть exit, то сценарий заканчивается сразу.
Если оператор exit применен без параметра, то он заканчивает программу со
значением статуса, равным нулю, иначе – со значением вычисленного выражения параметра. Значение статуса присваивается
встроенной переменной $?. |
12 |
Пример:
Вывести поля файла file1.me в обратном порядке.
awk ‘{for (i=NF; i>0; --i); print $i}’ file1.me
Пример:
Вывести все строки файла file2.me, находящиеся между парами start,stop.
awk ‘/start/,/stop/’ file2.me
13
Дополнительные переменные
ARGC - количество аргументов командной строки.
ARGV - массив, содержащий аргументы командной строки.
Индексы идут от 0 до ARGC – 1.
ARGV [0] – это всегда команда awk. Доступные опции UNIX не занимают массив ARGV.
FNR - номер текущей записи внутри файла ввода. Причем FNR <= NR.
Другими словами FNR ведет учет номера записи только текущего файла, а NR –
номера строки всех файлов. |
14 |
|
Пример.
Пусть файл File.1 содержит три строки-записи, а файл File.2– две.
Тогда команда
awk’{print FNR NR}’ File.1 File.2
выведет следующие строки:
1 |
1 |
2 |
2 |
3 |
3 |
1 |
4 |
2 |
5 |
15
FLENGTH - хранит значение длины строки сопоставления, производимого
функцией match().
FSTART - хранит значение начала строки сопоставления, производимого
функцией match(). По значениям FLENGTH и FSTART можно определить, что именно сопоставлялось.
SUBSEP - значение разделителя сценариев. По умолчанию хранит символ
двойных кавычек 0348, что эквивалентно 2810 |
|
или 1С16. |
16 |
|
ENVIRON - массив, содержащий значения текущих переменных окружения.
Индексы массива – это имена самих переменных, а элементы массива – это значения этих переменных. Для
выделения названий и их значений удобно иcпользовать цикл for .. in.
Пример. Программа вывода листинга программ с номерами строк, если vi используется в качестве редактора по умолчанию.
ENVIRON[EDIDOR] == “vi” {print NR, $0};
17
CONVFMT - формат преобразования чисел. Ее значение по умолчанию - %6g.
Эта переменная обычно используется только для внутреннего применения.
FIELDWIDTHS - переменная представляет возможность работы программисту с
полями фиксированной ширины, не привязываясь к отдельным символам разделителя полей.
18
Если она определена, то считается, что
все поля имеют фиксированную ширину. В этом случае запись ввода разделяется с
использованием значений ширины поля, определенных в переменной FIELDWIDTHS.
При этом значение переменной FS не учитывается. Но в случае присваивания переменной FS нового значения, эта
переменная отменяет использование переменной FIELDWIDTHS, и она
восстанавливает значение по умолчанию.
19
Значения переменной FIELDWIDTHS – числа, разделенные пробелами или табуляцией, поэтому поля не обязательно должны быть одинаковой ширины.
Пример.
В файле file.me первый символ обозначает “пол” человека. 0 - женщина, 1 – мужчина. Последний столбец - возраст служащих.
1Petrov, Ivan 24 |
|
1Ivanov, Petr 26 |
|
0Silina, Lina 25 |
20 |