gawk 4 - 使用变量作为数组索引

时间:2014-06-06 18:36:05

标签: multidimensional-array gawk

是否可以使用变量作为真正的多维数组的索引?我有一个gawk 4.1.1脚本,它运行在Cisco配置文件中,我想创建一个看起来像这样的数组:

myArray的[站点代码] [交换机名称]

从正在处理的FILENAME中提取sitecode和switchname,然后使用其他索引来计算基于每个交换机的各种内容。对于上面的这两个索引,我想将索引和值都设置为同一个变量。所以最终我可以有一个看起来像这样的数组:

myarray[nyc01][switch01][Vlan100][192.168.100.1]
myarray[nyc01][switch01][Vlan101][192.168.101.1]
myarray[nyc01][switch02][Vlan200][192.168.200.1]

下面的代码说明了我要做的事情:

#!/bin/bash
awk '{
var1="variable1"
var2="variable2"
array[var1]=var1
array[var1][var2]=var2
print array[var1][var2]
}'

我收到此错误:

awk: cmd. line:6: (FILENAME=- FNR=1) fatal: attempt to use scalar `array["variable1"]' as an array

我理解为什么会这样。我已经将var1和var2声明为标量变量。但是我有什么办法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

设置array[var1] = var1时,您要将该元素设置为保持标量 然后你尝试array[var1][var2] = var2,你想要重新定义存储在array[var1]的东西。引自the manual

  

通过指定其他类型的值,可以更改已分配的任何元素的类型 。你必须首先删除当前元素,这有效地使gawk忘记了该索引处的元素:

(强调我的)

我看到如果您按其他顺序尝试分配,则会收到不同但相应的错误消息

% awk 'BEGIN {v1="foo"; v2="bar";a[v1][v2] = v2; a[v1]=v1}'
awk: cmd. line:1: fatal: attempt to use array `a["foo"]' in a scalar context

您可以坚持使用模拟的多维数组:

$ awk 'BEGIN {v1="foo"; v2="bar"; a[v1] = v1; a[v1,v2] = v2; print a[v1,v2]}'
bar