Logo Host-telecom.com — профессиональный хостинг в Европе! Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

💰 Самые низкие цены на домены

🔒 Отличный хостинг на SSD c бесплатными SSL

💻 Огромнейший выбор dedicated выделенных серверов

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VDS хостинг Облачный сервер в Нидерландах и Украине

Аренда виртуального сервера от $7.91

Партнёрская программа
$20 за клиента

Wildcard сертификаты от $74,97 в год.

Дешевые ssl сертификаты для домена

Sectigo сертификаты от $7,67 в год.

10.17. Массивы

awk поддерживает одномерные массивы. Массивы и элементы массивов нет необходимости объявлять. Индексы массива могут быть числом или строкой. Пример условного обозначения числового индекса:

	x[NR] = $0
присваивает текущую строку вводного файла элементу NR массива x.

Фактически возможно считать целый вводной файл в массив с помощью программы awk:

              { x[NR] = $0 }
        END   { ... обработка ...}

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

Элементы массива могут именоваться с помощью нецифровых величин. Например, следующая программа накапливает общее количество населения Asia и Africa в соответветствующий массив pop. Оператор END печатает общее количество населения этих двух континентов.

        /Asia/          { pop["Asia"] += $3 }
        /Africa/        { pop["Africa"] += $3 }
 END {     print "Asian population in million is", pop[Asia]
       print "African population in million is", pop[Africa]
     }
Результат получим следующий:
      Asian population in million is   1765
      African population in million is   37

В этой программе, если вы воспользуетесь pop[Asia] вместо pop["Asia"], то выражение будет использовать значение переменной как индекса, и так как значение переменной не установлено, то количество населения будет накапливаться в pop[""].

Предположим, нужно определить общую площадь каждого континента из файла countries.

Каждое выражение может быть использовано как индекс при ссылке в массиве. Так:

	area[ $4 ] += $2
использует строку в 4-м поле текущей записи вводного файла для индексирования массива area, накапливая значение второго поля:
        BEGIN  { FS = "\t" }
               { area[$4] += $2 }
        END    { for (name in area)
                     print name, area[name] }

Относительно файла countries получим результат:

          Asia  13611
          North America 7467
          South America 4358
          Australia 2968
          Africa 1888

Эта программа использует следующую форму оператора, который организует итерации для нахождения индекса в массиве:

	for ( i in array ) оператор 
выполняется "оператор" с переменной i , для которой определен array[i]. Цикл выполняется для каждого определенного индекса, который выбирается в произвольном порядке.

awk не поддерживает многомерные массивы, но допускает список индексов. Они объединяются в один индекс значениями, разделенными строкой (хранимой в переменной SUBSEP).

Например:

          for ( i = 1; i <= 10; i++ )
               for ( j = 1; j <= 10; j++ )
                    arr[i, j] = ...
создает массив, который ведет себя как двумерный массив. Индексом является сочетание i, SUBSEP и j.

Вы можете определить, появляется ли конкретное i в массиве arr:

	if ( "Africa" in arrea ) ...

Это условие приведет к выполнению тестирования без создания массива ["Africa"]. Этот массив создался, бы если использовалось

	if ( area ["Africa"] != "" ) ...

Возможно также разбить любую строку на поля, которые станут элементами массива. Это можно сделать с помощью встроенной функции split:

	split ( "s1:s2:s3", a, ":" )
split разбивает строку на 3 поля, используя в качестве разделителя ":" и сохраняя s1 в [1], s2 - в [2], s3 - в [3]. Возвращаемое значение этого оператора равно числу полей, т.е. трем. Третий аргумент функции split - это регулярное выражение, будет использоваться как поле разделителя. Если третий аргумент отсутствует, то в качестве поля разделителя будет использоваться FS.

Массив элементов может быть разделен с помощью аргумента delete:

	delete имя_массива [индекс]

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

хостинг Украина Виртуальный хостинг для сайта от $4,87

Регистрация домена от $2 в год

Партнерская программа – $20 за клиента

VPS с гибкой конфигурацией: за 1€

Мощные выделенные сервера: от 25€

Собственный Дата-Центр
Поддержка 24/7

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

ATLEX Выделенные серверы: в Европе / в России.

Виртуальные серверы: в Европе / в России.

Партнерская программа

Ваш сайт в 8 раз быстрее конкурентов. Хостинг от $2.95

VPS: SSD, KVM, бесплатные бэкапы и администрирование

Все необходимое для вашего сайта и лучшая техподдержка 24/7

хостинг сайтов ГиперХост — хостинг сайтов который Вы искали.

Виртуальный хостинг, Аренда VPS серверов, рация доменных имен, SSL сертификаты

Новости мира IT:

Архив новостей

Последние комментарии:

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...