П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4072 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6722 раз(а).

Учебник HTML.
Просмотров 3693 раз(а).

Руководство по PHP5.
Просмотров 5966 раз(а).

Хостинг через призму DNS.
Просмотров 4773 раз(а).

Подборка текстов стандартных документов.
Просмотров 56218 раз(а).

Учебник PHP - Самоучитель
Просмотров 3665 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8250 раз(а).

Внешние атаки...
Просмотров 4517 раз(а).

Учебник PHP.
Просмотров 3154 раз(а).

SSI в примерах.
Просмотров 161 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь



Пригласительные на свадьбу в электронном виде шаблон wedding-post.ru.


Руководство пользователя для GNU Awk

11. Массивы в awk

11.9 Многомерные массивы

Многомерный массив --- такой массив, в котором элемент указывается последовательностью индексов, а не одним индексом. Например, двумерный массив требует два индекса. Обычный способ (в большинстве языков, включая awk) ссылаться на элемент двумерного массива с именем grid есть grid[x,y].

Многомерные массивы в awk поддерживаются конкатенацией индексов в одну цепочку. Точнее, awk конвертирует индексы в цепочки (см. раздел 7.4 [Конверсия цепочек и чисел], стр. 81) и сцепляет их вместе с разделителями между ними. Это создает одну цепочку, которая описывает значения всех индексов. Комбинированная цепочка используется как один индекс в обычном одномерном массиве. В качестве сепаратора используется значение переменной SUBSEP.

Например, предположим, что вычисляем выражение `foo[5,12] = "value"' при значении SUBSEP равном "@". Номера пять и 12 конвертируются в строки и соединяются с `@' между ними, что приводит к "5@12"; таким образом, элементу foo["5@12"] присваивается в качестве значения "value".

Когда запоминается элемент массива, для awk безразлично, был ли он с одним индексом или с последовательностью индексов. Два выражения `foo[5,12]' и `foo[5 SUBSEP 12]' всегда эквивалентны.

По умолчанию значением SUBSEP служит цепочка ""034", которая содержит непечатный символ, появление которого маловероятно в awk-программе или во входных данных. Польза выбора маловероятных символов проистекает из факта, что значения индекса, содержащего цепочку, соответствующую SUBSEP, иногда приводят к комбинированным цепочкам не взаимно однозначно. Предположим, что SUBSEP была бы "@"; тогда `foo["a@b", "c"]' и `foo["a", "b@c"]' были бы неразличимыми, так как оба запомнятся как `foo["a@b@c"]'.

Можно проверить, имеется ли определенная индексная последовательность в "многомерном" массиве с помощью того же самого оператора `in', используемого для одномерных массивов. Вместо единственного индекса в позиции левого операнда нужно писать всю последовательность индексов, разделенных запятыми и заключенную в скобки: (subscript1, subscript2, ...) in array.

Следующий пример трактует свой ввод как двумерный массив полей; оп поворачивает этот массив на 90 градусов по часовой стрелке и печатает результат. Предполагается, что все строки имеют одинаковое количество элементов.

awk '-
if (max.nf ! NF)
max.nf = NF max.nr = NR for (x = 1; x != NF; x++)
vector[x, NR] = $x ""

END -
for (x = 1; x != max.nf; x++) -
for (y = max.nr; y ?= 1; --y)
printf("%s ", vector[x, y]) printf(""n") "" ""'

Если задан ввод:

1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3

то программа выдаст:

4 3 2 1 5 4 3 2 6 5 4 3 1 6 5 4 2 1 6 5 3 2 1 6

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru