我想以这种方式自动完成变量(数组)的名称:
array$1[something]++
我正试图获得这个:
array1[something]++
或
array53[something]++
在C中,我记得我做不到......但在AWK中我不知道,因为如果我这样做:
array'$1'[something]++
它自动完成名称:
arraySCRIPTPARAMETER[something]++
有什么想法吗?我错了吗?
答案 0 :(得分:3)
而不是这样做:
array$1[something]++
如果你这样做会更好:
array[$1, something]++
您还可以将索引存储到另一个变量,如:
indices[i++]=$1
然后再做
for (i = 0; i in indices; ++i) {
k = indices[i]
printf "something of %s: %s\n", k, array[k, something]
}
答案 1 :(得分:2)
重新思考您的代码,可能使用2D数组。
您的代码段:
array'$1'[something]++
只能“偶然”和“与贝壳纵容”。必须发生的是你有一个看起来有点像这样的脚本(整个脚本会有更多,但这是重要的一点):
awk '/something/ { array'$1'[something]++ }'
shell删除了单引号(awk
没有看到它们),并且还将$1
替换为shell脚本的第一个参数,从而创建awk
看到的内容:
/something/ { arrayPARAM1[something]++ }
请注意,该名称在awk
脚本的持续时间内是固定的; $1
不是当前输入行的第一个字段。
所以,这就是实际发生的事情。如果没有更多的代码(或代码的目的)可用,就不可能确切地说明你应该做什么,但正如我前面所说,2D阵列是一个明显的可能性,可以更好地解决你的问题。重新开始。