我正在通过简单的例子在awk中寻找简单的数组定义。如何定义数组并在awk语言中使用数组的元素?
答案 0 :(得分:2)
Awk没有数组,但有地图。
与awk中的所有变量一样,不需要定义它。它会在你第一次使用时发生。
分配地图元素:
a[key] = value
使用元素:
print a[key]
迭代:
for (i in a) {
print i, a[i]
}
如果使用整数作为键,则地图将等效于数组。
答案 1 :(得分:2)
你可以这样做:
awk 'BEGIN {a[1]=50;a[2]=23;a[50]=432}'
答案 2 :(得分:2)
awk中的数组是关联类型,即您也可以使用字符串而不仅仅是数字作为索引值的键。
a[1] = "abc" ## Valid.
a["x"] = "xyz" ## Also valid.
可以使用i in a
访问数组中的元素,其中i
将获取密钥,a
是引用的数组。例如:
#!/usr/bin/awk -f
BEGIN {
a[1] = "abc"
a["x"] = "xyz"
for (i in a) {
print a[i]
}
}
awk -f script.awk
会打印出来:
xyz
abc
您可能会注意到元素访问方式的顺序与保存元素的方式不同。这是因为awk
在实现此目的时可以有不同类型的实现。
如果您想确定按顺序访问元素,则必须使用数字键或索引来存储它们:
#!/usr/bin/awk -f
BEGIN {
a[0] = "abc"
a[1] = "xyz"
for (i = 0; i in a; ++i) {
print a[i]
}
}
您还可以在使用GNU的awk时配置行为:
PROCINFO [ “sorted_in”]
如果此元素存在于PROCINFO中,则其值控制顺序 其中数组元素遍历for循环。支持的值 是“@ind_str_asc”,“@ ind_num_asc”,“@ val_type_asc”,“@ val_str_asc”, “@val_num_asc”,“@ ind_str_desc”,“@ ind_num_desc”,“@ val_type_desc”, “@val_str_desc”,“@ val_num_desc”和“@unsorted”。价值也可以 是任何比较函数的名称,定义如下:
function cmp_func(i1,v1,i2,v2)
其中i1和i2是索引,v1和v2是对应的 被比较的两个元素的值。它应该返回一个数字 小于,等于或大于0,取决于元素的方式 数组的排序。