Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将2D数组名作为参数传递给awk中的函数_Awk - Fatal编程技术网

将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] }

我想将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函数中的数组不断变化。但我得到一个错误,指出“试图使用标量参数数组作为数组”。但同样的事情,当我通过一个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
或其他版本及其版本号)?