我想在我的BEGIN语句中定义一个带有未定义索引号的数组;我怎么能在AWK中做到这一点?
BEGIN {send_packets_0to1 = 0;rcvd_packets_0to1=0;seqno=0;count=0; n_to_n_delay[];};
我遇到n_to_n_delay []的问题。
答案 0 :(得分:19)
info gawk
部分说:
'awk'中的数组表面上类似于其他编程中的数组 语言,但有根本的区别。在'awk'中,它不是 必须在开始使用之前指定数组的大小。 此外,'awk'中的任何数字或字符串,而不仅仅是连续的 整数,可以用作数组索引。
在大多数其他语言中,数组必须在使用前“声明”, 包括他们有多少元素或组件的规范 包含。在这些语言中,声明会导致连续的块 要为那么多元素分配的内存。通常,索引在 数组必须是正整数。
但是,如果你想将一个变量“声明”为一个数组,以便稍后在标量产生错误时错误地引用它,你可以在BEGIN
子句中包含它:
split("", n_to_n_delay)
将创建一个空数组。
这也可用于清空现有数组。虽然gawk
能够使用delete
,但其他版本的AWK却没有。{/ p>
答案 1 :(得分:2)
我认为你不需要在awk中定义数组。您只需使用它们,如下例所示:
{
if ($1 > max)
max = $1
arr[$1] = $0
}
END {
for (x = 1; x <= max; x++)
print arr[x]
}
注意没有单独的定义。该示例来自The AWK Manual。