Multidimensional array gawk 4-将变量用作数组索引

Multidimensional array gawk 4-将变量用作数组索引,multidimensional-array,gawk,Multidimensional Array,Gawk,是否可以使用变量作为真实多维数组的索引?我有一个贯穿Cisco配置文件的gawk 4.1.1脚本,我想创建一个如下所示的阵列: myarray[nyc01][switch01][Vlan100][192.168.100.1] myarray[nyc01][switch01][Vlan101][192.168.101.1] myarray[nyc01][switch02][Vlan200][192.168.200.1] myarray[sitecode][switchname] 其中siteco

是否可以使用变量作为真实多维数组的索引?我有一个贯穿Cisco配置文件的gawk 4.1.1脚本,我想创建一个如下所示的阵列:

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

其中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是标量变量。但是我想做的事情有解决办法吗?

当您设置
数组[var1]=var1
时,您将该元素设置为保持标量。
然后尝试
array[var1][var2]=var2
,希望重新定义存储在
array[var1]
中的内容。引用

已分配的任何元素的类型不能通过分配不同类型的值来更改。您必须首先删除当前元素,这实际上会使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

array[var1]=var1:赋值的左侧是数组的一行(如果有三维数组,则为平面),rhs为单值。你想一次分配整个n-1维吗???我现在才意识到。出于某种原因,我想让数组[var1]同时包含标量值和另一个数组-array[var1][var2]。当我意识到这一点并大声自言自语时,我觉得自己很傻。事实上,我从手册中读到了这一点,但它的意义却让我难以理解。谢谢你的回答:)我注意到你从来没有接受过任何问题的答案。要成为社区负责任的成员,请通读