将2D数组名作为参数传递给awk中的函数
我想将2D数组作为参数传递给awk中的函数。我试过这个将2D数组名作为参数传递给awk中的函数,awk,Awk,我想将2D数组作为参数传递给awk中的函数。我试过这个 add(element1,element2,array) -> this "array" could be bigArray,smallArray etc function add(element1,element2,array) { if(!(element1 SUBSEP element2 in array)) { array[element1,element2] }
add(element1,element2,array) -> this "array" could be bigArray,smallArray etc
function add(element1,element2,array)
{
if(!(element1 SUBSEP element2 in array))
{
array[element1,element2]
}
}
add函数中的数组不断变化。但我得到一个错误,指出“试图使用标量参数数组作为数组”。但同样的事情,当我通过一个1D数组时,它会工作。你能帮我解决一下刚才评论的这个问题吗,用下面的脚本测试一下:
script.awk的内容
:
BEGIN {
a["one", "two"] = 1;
el1 = "one";
el2 = "two";
add( el1, el2, a );
el1 = "one";
el2 = "three";
add( el1, el2, a );
print "length of array: " length( a );
}
function add(element1,element2,array)
{
if(!(element1 SUBSEP element2 in array))
{
printf "Elem1 -> %s\t\tElem2 ->%s\n", element1, element2
array[element1,element2] = 2;
}
}
像这样运行:
awk -f script.awk
具有以下输出:
Elem1 -> one Elem2 ->three
length of array: 2
如前所述,使用以下脚本对其进行了测试:
script.awk的内容
:
BEGIN {
a["one", "two"] = 1;
el1 = "one";
el2 = "two";
add( el1, el2, a );
el1 = "one";
el2 = "three";
add( el1, el2, a );
print "length of array: " length( a );
}
function add(element1,element2,array)
{
if(!(element1 SUBSEP element2 in array))
{
printf "Elem1 -> %s\t\tElem2 ->%s\n", element1, element2
array[element1,element2] = 2;
}
}
像这样运行:
awk -f script.awk
具有以下输出:
Elem1 -> one Elem2 ->three
length of array: 2
对不起,我没有得到结果。。。原因是传递给数组的参数没有在任何地方声明。。所以函数认为这是一个变量,而不是数组。我只是想知道有没有一种方法可以让函数将传递的变量识别为数组而不是变量..我从
length
函数中得到了错误,正如您在给出的链接中所描述的,但是OP的代码在gawk
3.1.6中对我来说很好。OP的代码可以使用subsp
和in
操作符访问2D数组。@DennisWilliamson:可以。非常感谢。我后来意识到。使用多下标数组这种不常见的方式让我感到困惑。但后来检查过了,一切都好了。至少对于我们的版本。很抱歉我没有得到结果。。。原因是传递给数组的参数没有在任何地方声明。。所以函数认为这是一个变量,而不是数组。我只是想知道有没有一种方法可以让函数将传递的变量识别为数组而不是变量..我从length
函数中得到了错误,正如您在给出的链接中所描述的,但是OP的代码在gawk
3.1.6中对我来说很好。OP的代码可以使用subsp
和in
操作符访问2D数组。@DennisWilliamson:可以。非常感谢。我后来意识到。使用多下标数组这种不常见的方式让我感到困惑。但后来检查过了,一切都好了。至少对于我们的版本。我会在一段时间内编辑我的答案,但刚才我已经测试了你的代码并运行良好!没有错误。我的版本:GNU Awk 4.0.1您使用的Awk版本是什么(gawk
或其他版本及其版本号)?我将在一段时间内编辑我的答案,但刚才我已经测试了您的代码并正常工作!没有错误。我的版本:GNU Awk 4.0.1您使用的Awk版本是什么(gawk
或其他版本及其版本号)?