Руководство пользователя для GNU Awk
11. Массивы в awk
11.6 Оператор delete (вычеркивание)
Можно удалять отдельные элементы массива, используя оператор delete: delete array[index]. Если вы вычеркнули элемент массива, вы не можете больше узнать значение, которое этот элемент имел. Дело обстоит так, как будто на него никогда не ссылались и не присваивали никакого значения. Вот пример вычеркивания элементов массива:
for (i in frequencies)
delete frequencies[i]
В этом примере удаляются все элементы массива frequencies. Если удален какой нибудь элемент, то никакой оператор for просмотра массива не обнаружит этот элемент и выдаст ноль (т.e. false):
delete foo[4] if (4 in foo)
print "Это никогда не будет напечатано"
Важно заметить, что вычеркнуть элемент есть не то же самое, что присвоить ему пустое значение (пустую цепочку ""):
foo[4] = "" if (4 in foo)
print "Это будет напечатано, хотя foo[4] теперь пусто"
Вычеркивание несуществующего элемента не считается ошибкой. Можно вычеркнуть все элементы массива одним оператором, убрав индекс в операторе delete: delete array . Эта возможность есть расширение gawk; она не доступна в режиме совместимости (см. раздел 14.1 [Параметры командной строки], стр.161). Эта версия оператора delete почти в три раза эффективнее, чем вычеркивание по одному элементу за раз.
Следующий оператор представляет переносимый, но не очевидный способ очистки массива.
# спасибо to Michael Brennan за указание этого способа
split("", array)
Функция split (см. раздел 12.3 [Встроенные функции для действий с цепочками], стр. 137) сначала очищает указанный массив. Этот вызов просит ее разделить пустую строку. Поскольку нет данных для разделения, функция только очищает массив.
ВНИМАНИЕ: Вычеркивание массива не меняет его тип; нельзя вычеркнуть массив и затем использовать его имя как скаляр. Например, такое не сработает:
a[1] = 3; delete a; a = 3
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|