【发布时间】:2021-07-14 17:14:27
【问题描述】:
我知道在 awk 中我们通过引用传递数组元素,但我想知道是否有按值传递的方法?我正在尝试在 for 循环中使用内置拆分函数,并且需要从另一个数组中获取第二个参数(数组名称)并稍后引用它。我目前正在运行以下命令;
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]
}'
有输出;
awk: cmd. line:1: fatal: split: second argument is not an array
即使我修改为先将数组值存储到变量中并使用 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] }'
同样的输出;
awk: cmd. line:1: fatal: split: second argument is not an array
我知道这将是由于数组元素被作为引用传递。有没有办法解决这个问题?
我的预期输出是;
test array with index 1 = test
【问题讨论】:
-
通过在一个有 1 个条目的数组上的循环中调用 split() 而不是只调用一次,然后使用 @987654326 的第三个参数调用 split(),你真的混淆了你的问题@ 看起来很奇怪,并且您的输入中不存在该字符串。您的示例可能就像询问如何做
var="arrayone"; split($0,var)一样简单。