【发布时间】:2020-09-22 13:25:33
【问题描述】:
这个问题的目的是用非显而易见的解决方案发布一个规范的答案 - 复制数组数组(需要 GNU awk 用于数组数组)。
给定一个数组,如 gawk 手册中关于 traversing arrays 部分所示:
BEGIN {
a[1] = 1
a[2][1] = 21
a[2][2] = 22
a[3] = 3
a[4][1][1] = 411
a[4][2] = 42
walk_array(a, "a")
}
function walk_array(arr, name, i)
{
for (i in arr) {
if (isarray(arr[i]))
walk_array(arr[i], (name "[" i "]"))
else
printf("%s[%s] = %s\n", name, i, arr[i])
}
}
您将如何编写一个 copy_array 函数来处理数组数组以将现有数组复制到新数组,以便随后为新复制的数组调用 walk_array() 将为新数组输出相同的值至于原来的,即这样:
BEGIN {
a[1] = 1
a[2][1] = 21
a[2][2] = 22
a[3] = 3
a[4][1][1] = 411
a[4][2] = 42
walk_array(a, "a")
copy_array(a, b)
print "----------"
walk_array(b, "b")
}
会输出:
a[1] = 1
a[2][1] = 21
a[2][2] = 22
a[3] = 3
a[4][1][1] = 411
a[4][2] = 42
----------
b[1] = 1
b[2][1] = 21
b[2][2] = 22
b[3] = 3
b[4][1][1] = 411
b[4][2] = 42
【问题讨论】:
标签: awk