- •Условная выборка строк
- •Составные шаблоны
- •Примеры.
- •А) Программа
- •Б) Программа
- •Пример.
- •Операторы в 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, содержащая в
- •Для распознавания метода передачи
- •Но в силу того, что браузер передает информацию из формы в закодированном виде,
- •Пример:
Проблема в следующем. Как отделить признак “пола” от фамилии?
Программа.
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 |