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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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



Пригласительные на свадьбу в электронном виде шаблон 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