使用变量作为数组索引



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

myarray [sitecode] [switchname]

从正在处理的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是标量变量。但是,对于我正在尝试做的事情,是否有一种解决方法?

当您设置array[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

相关内容

  • 没有找到相关文章

最新更新