自动完成AWK变量

时间:2013-09-12 16:00:56

标签: linux bash awk

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

array$1[something]++

我正试图获得这个:

array1[something]++

array53[something]++

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

array'$1'[something]++

它自动完成名称:

arraySCRIPTPARAMETER[something]++

有什么想法吗?我错了吗?

2 个答案:

答案 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阵列是一个明显的可能性,可以更好地解决你的问题。重新开始。