77. 分配数组元素


与您在其他编程语言中使用的传统数组相比,awk 中的数组非常强大。

在 Awk 中,数组是关联的,即一个数组包含多个索引/值对。 索引不需要是一组连续的数字; 实际上它可以是字符串或数字,并且不需要指定数组的大小。

语法:

arrayname[string]=value
  • arrayname 是数组的名称。
  • string 是数组的索引。
  • value 是分配给数组元素的任何值。

如果要访问数组中的特定元素,可以使用 arrayname[index] 格式,它为您提供分配给该索引的值。

下面是一个简单的数组赋值示例:

$ cat array-assign.awk
BEGIN {
  item[101]="HD Camcorder";
  item[102]="Refrigerator";
  item[103]="MP3 Player";
  item[104]="Tennis Racket";
  item[105]="Laser Printer"; 
  item[1001]="Tennis Ball";
  item[55]="Laptop";
  item["na"]="Not Available";
  print item["101"];
  print item[102];
  print item["103"];
  print item[104];
  print item["105"];
  print item[1001];
  print item[55];
  print item["na"];
}

$ awk -f array-assign.awk
HD Camcorder
Refrigerator
MP3 Player
Tennis Racket
Laser Printer
Tennis Ball
Laptop
Not Available 

请注意上面示例中的以下几点:

  • 数组索引不按顺序排列。它甚至不必从 0 或 1 开始。它实际上是从 101 .. 105 开始,然后跳到 1001,然后下降到 55,然后它有一个字符串索引 "na"
  • 数组索引可以是字符串。该数组中的最后一项有一个索引字符串,即 "na" 索引。
  • 您不需要在 awk 中初始化甚至定义数组。在使用它之前不需要指定总数组大小。
  • awk 数组的命名约定与 awk 变量的命名约定相同。

从 awk 的角度来看,数组的索引始终是一个字符串。即使您传递一个数字作为索引,awk 也会将其视为字符串索引。以下两者是相同的。

item[101]="HD Camcorder"
item["101"]="HD Camcorder"