Arrays 如何将数组的值作为第二个参数传递给awk';s分裂函数?

Arrays 如何将数组的值作为第二个参数传递给awk';s分裂函数?,arrays,for-loop,awk,Arrays,For Loop,Awk,我知道在awk中,我们通过引用传递数组元素,但我想知道是否有一种方法可以通过值传递?我试图在for循环中使用内置的split函数,需要从另一个数组中获取第二个参数(数组名),并在以后引用它。我当前正在运行以下命令 echo "test this" | awk 'BEGIN { arraynametest[1] = "arrayone"; for (i=1; i <= length(arraynametest); i++) { s

我知道在awk中,我们通过引用传递数组元素,但我想知道是否有一种方法可以通过值传递?我试图在for循环中使用内置的split函数,需要从另一个数组中获取第二个参数(数组名),并在以后引用它。我当前正在运行以下命令

echo "test this" | awk 'BEGIN { 
  arraynametest[1] = "arrayone"; 
  for (i=1; i <= length(arraynametest); i++) { 
    split($0, arraynametest[i], /\[\[:blank:]]/); 
  }
} END { 
  print "test array with index ", i, " = ", arrayone[i] 
}'
即使我修改为先将数组值存储到变量,然后使用var,它也不起作用

echo "test this" | awk 'BEGIN { arraynametest[1] = "arrayone"; for (i=1; i <= length(arraynametest); i++) { arrayname = arraynametest[1]; split($0, arrayname, /\[\[:blank:]]/); }} END { print "test array with index ", i, " = ", arrayname[i] }'
我知道这是因为数组元素作为引用传递。有办法解决这个问题吗

我的预期产出是:

test array with index 1 = test

不能在数组上下文中使用标量,反之亦然。处理这个问题的一种方法是使用多维数组,其中第一个索引可以是数组名(为什么不使用索引呢?)一个简化版本的示例代码

$ echo "test this" | 
  awk '{arraynames[1] = "arrayone";
        data[arraynames[1]][1];  
        split($0, data[arraynames[1]]);
        print "test array with name = " (name=arraynames[1]) ", value at index 1 = " data[name][1]}'

test array with name = arrayone, value at index 1 = test

还要注意的是,在
BEGIN
$0
中没有读取,因此即使修复标量/数组混合,也不会得到任何输出。

谢谢@karakfa!关于开始块,您当然是对的。我忘记了这一点,当我试图拿出一个mre,我没有使用它在开始在我的实际脚本。就索引建议而言,它使我的代码在脚本的后面更具可读性。感谢您的帮助:)您应该提到,这需要一个支持数组数组的awk变体,例如GNU awk。您在一个有1个条目的数组上的循环中调用split(),而不是只调用一次,然后用第三个参数
/\[\[:blank:]调用split()/
这看起来很奇怪,而且输入中不存在该字符串。您的示例可以简单到询问如何执行
var=“arrayone”;拆分($0,var)
test array with index 1 = test
$ echo "test this" | 
  awk '{arraynames[1] = "arrayone";
        data[arraynames[1]][1];  
        split($0, data[arraynames[1]]);
        print "test array with name = " (name=arraynames[1]) ", value at index 1 = " data[name][1]}'

test array with name = arrayone, value at index 1 = test