
- •Условная выборка строк
- •Составные шаблоны
- •Примеры.
- •А) Программа
- •Б) Программа
- •Пример.
- •Операторы в 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, содержащая в
- •Для распознавания метода передачи
- •Но в силу того, что браузер передает информацию из формы в закодированном виде,
- •Пример:
Для метода GET наиболее важна переменная QUERY_STRING, содержащая в
формате Имя_1=Значение_1&Имя_2=Значение_2&…. содержимое заполненной формы, которое
добавляется к URL.
Для метода POST важны переменные: - CONTENT_LENGTH - содержит число байтов в стандартном вводе;
- CONTENT_TYPE - содержит тип передаваемых данных от скрипта.
51
Для распознавания метода передачи
данных от формы применяется переменная окружения REQUEST_METHOD, которая
содержит значение “GET” для метода GET и значение “POST” для метода POST.
При методе POST данные идут через
стандартный ввод в формате, что и для метода GET.
В этом случае применяется команда read Var. При таком вызове в переменную
Var попадает все, что идет до первого |
|
пробела в потоке стандартного ввода |
|
(STDIN). |
52 |
Но в силу того, что браузер передает информацию из формы в закодированном виде, где все пробелы заменяются символами “+”, то вся информация от формы будет проходить без всяких пробелов.
Если применена команда read Var1, Var2, Var3, ….
то первое слово попадет в переменную
Var1, второе – в Var2. Последней
переменной достанется все, что останется в стандартном вводе (такой ввод для CGI не применяется). 53
Пример:
В начале примера мы программируем на языке shell.
echo “Content-type: text/html” echo “”
echo “<html><head><title>” echo “CGI test on shell UNIX” echo “</title></head><body>”
echo “<h1> CGI test on UNIX shell and awk</h1>”
54
# Занесение в переменную Var1 данных от формы
if test $REQUEST_METHOD = ”GET” then Var1=$QUERY_STRING
elif test $REQUEST_METHOD = ”POST” then
read Var1
fi
echo “Var1 = “ $Var1 “<br>”
#Образуем конвейер из shell и awk: echo $Var1| awk ‘BEGIN {FS=”&”}
# Задание разделителя данных формы |
55 |
|
for (i=1; i<= NF; i++) {Arr[$i]=$i; N++}
#Получение в массиве Arr пар Имя=значение for (Name in Arr) {
print “Name = “ Name “Value = “ Arr[Name] “<br>”}
}’
Получение массива Arr можно выполнить и так:
echo $Var1| awk ‘{ split ($0,Arr,”&”); for (n in Arr) {print Arr[n]”<br>”}
}’
56