是否可以使用变量作为真正的多维数组的索引?我有一个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声明为标量变量。但是我有什么办法可以解决这个问题吗?
答案 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