我想以这种方式自动完成变量(数组)的名称:
array$1[something]++
我试图获得这个:
array1[something]++
或者
array53[something]++
在 C 中,我记得我不能那样做.. 但在 AWK 我不知道,因为如果我这样做:
array'$1'[something]++
它自动完成名称:
arraySCRIPTPARAMETER[something]++
有任何想法吗?我错了吗?
而不是这样做:
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]
}
重新考虑您的代码,可能使用二维数组。
你的片段:
array'$1'[something]++
只能“偶然”和“通过外壳”起作用。必须发生的事情是你有一个看起来有点像这样的脚本(整个脚本会有更多,但这是最重要的一点):
awk '/something/ { array'$1'[something]++ }'
shell 删除了单引号 (awk
看不到它们) 并且还用$1
shell 脚本的第一个参数替换了 ,从而创建了awk
如下所示的内容:
/something/ { arrayPARAM1[something]++ }
awk
请注意,该名称在脚本期间是固定的;这$1
不是当前输入行的第一个字段。
所以,这就是实际发生的事情。如果没有更多可用的代码(或代码的目的),就不可能准确地说明您应该做什么,但正如我前面所说的,二维数组显然可以更好地解决您的问题重新之后。