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

10.4. Простые действия

В этом подразделе описаны встроенные и определенные пользователем переменные и функции простых действий.

10.4.1. Встроенные переменные

Кроме чтения вводного файла и разбиения на поля, awk считает число считанных записей и число полей внутри текущей записи. Вы можете использовать эти счетчики в программе awk. Переменная NR - это номер текущей записи, NF - число полей в записи. Так программа:

{print NR, NF}

печатает номер каждой строки и число полей в этой записи. А программа:

{print NR, $0}

печатает каждую запись с соотвествующим номером в начале.

10.4.2. Определенные пользователем переменные

awk позволяет определять пользователям собственные переменные, которые можно использовать для хранения данных, выполнения арифметических действий. Для иллюстрации, подсчитаем общее количество населения и среднее значение из файла countries:

{sum = sum + $3}

END {print "Общее количество населения", sum, "млн"

{print "Среднее количество населения", NR,

"стран", sum/NR}

Первым действием является накопление значений из третьего поля каждой строки; второе действие, выполняемое после последнего ввода, - напечатать сумму и среднее значение:

Общее количество населения 2201 млн

Среднее количество населения

10 стран 220.1

10.4.2.1. Функции

Встроенные функции awk управляют арифметикой и операциями над строками. Например, функция string заменяет одну строку на другую. awk также позволяет вам определить собственные функции.

10.5. Примеры некоторых полезных программ

awk может использоваться для написания больших программ некоторой сложности. В нее могут входить некоторые короткие программы, которые для вас являются полезными и поучительными. Приведем некоторые из них.

Напечатать последнее поле каждой вводной строки:

{print $NF}

Напечатать 10-ю вводную строку:

NF == 10

Напечатать последнюю вводную строку:

{line = $0}

END {print line}

Напечатать строки, которые не имеют 4-го поля:

NF != 4 {print $0, "не имеют 4-го поля" }

Напечатать вводные строки, которые имеют более 4-х полей:

NF > 4

Напечатать последние поля вводных строк, начиная с 5-го:

$NF > 4

Напечатать общее число вводных строк:

END {print NR}

Напечатать обшее число полей:

{nf = nf+NF}

END {print nf}

Напечатать общее число символов вводного файла:

{nc = nc + length($0)}

END {print nc + NR}

Напечатать общее число строк, которые содержат строку "Asia":

/Asia/ {nlines++}

END {print nlines}

(nlines++ имеет тот же эффект, что и nlines = nlines+1).

10.6. Сообщения об ошибках

Если вы сделаете ошибку в программе awk, то получите сообщение об ошибке. Например, если вы попытаетесь запустить программу:

$3 < 200 { print ($1}

то получите сообщение об ошибке:

awk: syntax error at source line 1

contex is

$3 < 200 {print >>>$1}<<<

awk: illegal statement at source line 1

1 extra (

Некоторые ошибки могут быть обнаружены во время работы программы. Например, если вы попытаетесь поделить на 0 (ноль), то awk остановит обработку и распечатает номер записи вводного файла (NR) и номер строки в программе.

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