Как определить динамический массив в Begin Statement с помощью AWK

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

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

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

Ответ 1

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

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

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

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

split("", n_to_n_delay)

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

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

Ответ 2

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

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

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

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