- •Условная выборка строк
- •Составные шаблоны
- •Примеры.
- •А) Программа
- •Б) Программа
- •Пример.
- •Операторы в 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, содержащая в
- •Для распознавания метода передачи
- •Но в силу того, что браузер передает информацию из формы в закодированном виде,
- •Пример:
Условная выборка строк
Операторы-шаблоны, используемые для выбора строк, позволяют решать, какие строки обрабатывать, а какие - игнорировать.
Пример.
Вывести все автомобили, цены которых больше 3000$.
awk '$3 > 3000 |
{print $0}' cars.file |
Оператор-действие выводит на экран все найденные автомобили
Оператор-шаблон выбирает строки, в
которых цены больше 3000.
1
Составные шаблоны
Для конструирования составных шаблонов можно использовать логические
операции и круглые скобки.
В этом случае могут применяться следующие символы:
~ - искать по образцу; // - для обозначения шаблона;
&&- логическая операция «И»;
II - логическая операция «ИЛИ»;
!- логическая операция «Отрицание»2.
Примеры.
(NF < 3) || (NF > 4)
Этот шаблон соответствует всем записям ввода, которые не имеют точно четырех полей.
Шаблон
/^[a-d].*/
эквивалентен шаблону /^a.*/ || /^b.*/ ||/^c.*/
||/^d.*/
С помощью этого шаблона отыскиваются
все строки, начинающиеся с символов a, b, c и d.
3
Внимание! Шаблон диапазона $1==2, $1==5
отличен от составного шаблона $1>=2 && $1<=5
Пример. Файл file.me содержит строки:
1 |
0 |
4 |
2 |
3 |
1 |
5 |
2 |
4 |
1 |
1 |
0 |
5 |
1 |
5 |
3 |
7 |
0 |
6 |
4 |
4
А) Программа
awk ‘$1==3, $1==5’ file.me
выдаст результат:
2 |
1 |
4 |
1 |
5 |
1 |
5
Б) Программа
awk ‘$1>=3 && $1<=5’ file.me
выдаст результат:
2 |
1 |
4 |
1 |
5 |
1 |
4 |
2 |
5 |
2 |
5 |
3 |
6
Пример.
Вывести марки всех автомобилей фирмы "Ford", цены которых находятся в пределах от 8000$ до 15000$ включительно.
cat > diapaz.car
$1~/Ford/ && $3>=8000 && $3<=15000 {print $0} Ctrl-D
awk –f diapaz.car cars.file
7
Операторы в awk
Впрограмме awk возможно применение некоторых сложных операторов.
Восновном они совпадают с языком Си и shell.
А) Оператор if - такой же, как и в Си
1. if (условие) оператор_1; [else оператор_2]
Если оператор_1 и оператор else находятся в одной строке, то они обязательно отделяются друг от друга символом “точка с запятой”.
8
При выполнении более, чем одного оператора в оператор_1 или в оператор_2 необходимо их заключать в фигурные скобки.
2.Условие ? оператор_1 : оператор_2
Если условие истинно, то выполняется оператор_1, иначе оператор_2.
Данный оператор удобен для вывода сообщений об ошибках.
9
Б) Цикл for аналогичен в языке Си, но отличается от цикла в языке shell:
1.for ( выражение_1; условие; выражение_2 )
{операторы}
2. for (Var in Array) {операторы}
Во втором варианте оператора for
переменная Var пробегает по индексам массива Array.
10