Операционная система UNIX. Руководство программиста



     На сайте www.babybanz.ru каталог детской пляжной одежды. |     

Массивы


Кроме обыкновенных переменных, awk предоставляет одномерные массивы. Массивы не описываются явным образом, их элементы возникают, когда на них ссылаются. Индекс может быть произвольной непустой цепочкой, в том числе и не имеющей числового значения. Как пример использования обычного числового индекса, оператор

x [NR] = $0

присваивает текущую входную строку NR-му элементу массива x. В принципе, если выполнить следующую awk-программу:

{ x [NR] = $0 } END { ... программа ... }

можно в произвольном порядке обрабатывать все исходные данные целиком (хотя, быть может, и довольно медленно). Первая строка этой программы заносит входные записи в массив x.

Программа

{ x [NR] = $1 }

(в случае обработки файла countries) порождает массив со следующим содержимым:

x [1] = "Russia" x [2] = "Canada" x [3] = "China" . . .

Использование в качестве индексов в массиве нечисловых значений придает awk'у возможности, сходные с возможностями ассоциативной памяти Снобол-таблиц. Например, можно написать программу

/Asia/ { pop ["Asia"] += $3 } /Africa/ { pop ["Africa"] += $3 } END { print "Asia=" pop ["Asia"] , "Africa=" pop ["Africa"] }

которая порождает результат

Asia=1765 Africa=37

Отметим, что индексные выражения можно конкатенировать. Кроме того, в качестве индекса при обращении к массиву можно использовать произвольное выражение. Так, в конструкции

area [$1] = $2

текстовое значение первого поля строки используется как индекс в массиве area.




Содержание  Назад  Вперед