Как определить динамический массив в 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.