Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционная система UNIX.doc
Скачиваний:
94
Добавлен:
01.05.2014
Размер:
1.67 Mб
Скачать

10.18. Функции, определенные пользователем

awk поддерживает функции, определенные пользователем:

function имя( список_аргументов) {

операторы

}

Это определение может появляться в любом месте, где возможен оператор "шаблон-действие". Список аргументов - это список имен переменных, разделенных запятыми. Внутри тела функции эти переменные ссылаются на действительные переменные при вызове функции. Между именем функции и левой круглой скобкой не должно быть пробела, иначе это будет означать конкатенацию.

Массив элементов просматривается при обращении, как и в Си. Функция при просмотре не может изменить значение скалярных аргументов. Внутри функции формальные параметры являются локальными переменными, но все другие переменные являются глобальными. У вас может быть любое количество формальных параметров, которые используются только как локальные переменные. Операторreturnявляется необязательным, но если он отсутствует, возвращаемое значение будет неопределенным.

10.19. Комментарии

В программе awk могут присутствовать комментарии. Они начинаются с символа # и заканчиваются символом новой строки:

print x,y # это комментарий

Операторы обычно занимают одну строку. Несколько операторов могут располагаться на одной строке, тогда они должны разделяться точкой с запятой. Длинный оператор может располагаться на нескольких строках, причем каждая продолжаемая строка должна заканчиваться символом "\". Нельзя продолжить строку вида "....". Такое продолжение встречается редко, однако как только строка заканчивается запятой, операторы продолжаются автоматически. Примером этого служат операторы print и printf, и такое возможно после операторов "&&" и "||". Несколько операторов "шаблон-действие" могут появляться на одной строке, если они разделены точкой с запятой.

10.20. Вывод

Операторы print и printf являются простейшими конструкциями, которые генерируют вывод. Оператор print используется для образования просто вывода; printf - для форматируемого вывода. Подобно shell awk позволяет вам перенаправлять вывод в файл или в канал.

10.20.1. Оператор print

Оператор:

print expr1, rxpr2, ..., exprn

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

Оператор:

print

является сокращенной формой оператора:

print $0

Чтобы напечатать пустую строку, введите:

print ""

10.20.2. Разделители вывода

Разделители полей выводного файла и разделители записей хранятся в строковых переменных OFS и ORS. Первоначально значение OFS устанавливается как один пробел и ORS - один символ новой строки, но эти значения могут быть изменены в любой момент времени. Например, следующая программа печатает первое и второе поле каждой записи, имеющее двоеточие между полями и два символа новой строки после второго поля.

BEGIN { OFS = ":"; ORS = "\n\n" }

{ print $1, $2 }

Обратите внимание, что :

{ print $1 $2 }

печатает первое и второе поле без разделителя полей вводного файла.

10.20.3. Оператор printf

Оператор printf, используемый в awk, подобен этому оператору в Си, за исключением того, что спецификатор * не поддерживается.

Общий формат оператора:

print format expr1, rxpr2, ..., exprn

где format - это строка, содержащая информацию, которая будет печататься, и какое преобразование будет выполняться над выражением.

Каждая спецификация начинается с символа "%", заканчивается буквой, которая определяет преобразование, и может включать: - - выравнивание по левому краю в поле; width - заполнить поле на заданную ширину; поля, начинающиеся с лидирующего нуля, должны быть заполнены нулями; .prec - указывает максимальную ширину строки или разряд справа от десятичной точки.

В табл. 26 приведен список символов преобразования printf.

Таблица 26 Символы преобразования printf

Символ

Вид печати выражения

c

Один символ

d

Десятичное число

e

[-]d.ddddddE[+-]dd

f

[-]ddd.dddddd

g

e или f преобразование с подавленем незначащих нулей

o

Беззнаковое восьмиричное число

s

Строка

x

Беззнаковое шестнадцатиричное число

%

Печать %; нет аргументов для преобразования

Примеры оператора printf с соответтвующим выводом на той же строке.

printf "%d", 99/2 49

printf "%s", 99/2 4.950000e+01

printf "%f", 99/2 49.500000

printf "%6.2f", 99/2 49.50

printf "%g", 99/2 49.5

printf "%o", 99 143

printf "%06o", 99 000143

printf "%x", 99 63

printf "|%10s|", "January" | January|

printf "|%-10s|", "January" |January |

printf "|%.3s|", "January" |Jan|

printf "|%10.3s|", "January" | Jan|

printf "|%-10.3s|", "January" |Jan |

printf "%%" %

По умолчанию формат чисел выводного файла %.6g. Он может быть изменен, если вы зададите новое значение OFMT. OFMT также управляет преобразованием цифровых значений в строковые при конкатенации и создании массива индексов.

Соседние файлы в предмете Операционные системы