Как определить динамический массив в Begin Statement с помощью AWK - PullRequest
12 голосов
/ 04 декабря 2010

Я хочу определить массив в моей инструкции BEGIN с неопределенным порядковым номером;Как я могу сделать это в AWK?

BEGIN {send_packets_0to1 = 0;rcvd_packets_0to1=0;seqno=0;count=0; n_to_n_delay[];}; 

У меня проблема с n_to_n_delay [].

Ответы [ 2 ]

20 голосов
/ 04 декабря 2010

info gawk говорит, частично:

Массивы в 'awk' внешне напоминают массивы в других языках программирования, но есть фундаментальные различия.В 'awk' нет необходимости указывать размер массива перед его использованием.Кроме того, любое число или строка в 'awk', а не просто последовательные целые, могут использоваться в качестве индекса массива.

В большинстве других языков массивы должны быть "объявлены" перед использованием, включая указание количестваэлементы или компоненты, которые они содержат.В таких языках объявление вызывает выделение непрерывного блока памяти для такого количества элементов.Обычно индекс в массиве должен быть положительным целым числом.

Однако, если вы хотите «объявить» переменную как массив, чтобы позже ошибочно сослаться на нее позже, поскольку скаляр выдает ошибку, вы можетевключите это в ваше предложение BEGIN:

split("", n_to_n_delay)

, которое создаст пустой массив.

Это также можно использовать для очистки существующего массива.В то время как gawk может использовать для этого delete, другие версии AWK этого не делают.

2 голосов
/ 04 декабря 2010

Не думаю, что вам нужно определять массивы в awk.Вы просто используете их, как в примере ниже:

{
  if ($1 > max)
    max = $1
  arr[$1] = $0
}

END {
  for (x = 1; x <= max; x++)
    print arr[x]
}

Обратите внимание, что нет отдельного определения.Пример взят из Руководство AWK .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...