1

我想以这种方式自动完成变量(数组)的名称:

array$1[something]++

我试图获得这个:

array1[something]++

或者

array53[something]++

在 C 中,我记得我不能那样做.. 但在 AWK 我不知道,因为如果我这样做:

array'$1'[something]++

它自动完成名称:

arraySCRIPTPARAMETER[something]++

有任何想法吗?我错了吗?

4

2 回答 2

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]
}
于 2013-09-12T16:06:29.980 回答
2

重新考虑您的代码,可能使用二维数组。

你的片段:

array'$1'[something]++

只能“偶然”和“通过外壳”起作用。必须发生的事情是你有一个看起来有点像这样的脚本(整个脚本会有更多,但这是最重要的一点):

awk '/something/ { array'$1'[something]++ }'

shell 删除了单引号 (awk看不到它们) 并且还用$1shell 脚本的第一个参数替换了 ,从而创建了awk如下所示的内容:

/something/ { arrayPARAM1[something]++ }

awk请注意,该名称在脚本期间是固定的;这$1不是当前输入行的第一个字段。

所以,这就是实际发生的事情。如果没有更多可用的代码(或代码的目的),就不可能准确地说明您应该做什么,但正如我前面所说的,二维数组显然可以更好地解决您的问题重新之后。

于 2013-09-12T16:13:30.107 回答