考虑这个函数:
function add_one(in_ar, each) {
for (each in in_ar) {
in_ar[each]++
}
}
我想对其进行修改,以便如果提供了第二个数组,则将使用它而不是修改输入数组。我试过这个:
function add_one(in_ar, out_ar, each) {
if (out_ar) {
for (each in in_ar) {
out_ar[each] = in_ar[each] + 1
}
}
else {
for (each in in_ar) {
in_ar[each]++
}
}
}
BEGIN {
split("1 2 3 4 5", q)
add_one(q, z)
print z[3]
}
但我得到了这个结果:
fatal: attempt to use scalar `z' as an array
您的脚本中有 2 个问题
z
未初始化if(out_ar)
不适合数组要解决第一个问题,您需要分配一个数组元素(如
z[1]=1
),因为 awk 中没有数组声明。(您不能像declare -A
在 bash 中那样使用类似的语句)。第二个问题可以解决,前提是您使用的是 GNU awk,带有函数
isarray()
或typeof()
.所以你的代码应该是这样的:
我建议看看这个页面和这个页面。