如何使用AWK在Begin Statement中定义动态数组

时间:2010-12-04 10:51:38

标签: awk

我想在我的BEGIN语句中定义一个带有未定义索引号的数组;我怎么能在AWK中做到这一点?

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

我遇到n_to_n_delay []的问题。

2 个答案:

答案 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