在 awk 中克隆复杂数组

在 awk 中克隆复杂数组

我有一个像这样的数组......

a["a"]                = "aa"
a["b"]                = "ab"
a["c"]                = "ac"
a["d"]["a"]           = "ada"
a["d"]["b"]["a"]      = "adba"
a["e"]["a"]["a"]["a"] = "aeaaa"

...并且想要克隆它

clone(b, a)

这是我到目前为止所尝试的:

function clone(lhs, rhs){

    for (i in rhs) {
        if (typeof(arr[i]) == "array"){
            clone(lhs[i], rhs[i])
        } else {
            lhs[i] = rhs[i]
        }
    }
}

但这显然不起作用,因为在分配给b["d"]之前尚未创建。第二个问题是应该输入为.a["d"]["a"]b["d"]["a"]b["d"]array

答案1

您需要在克隆子数组之前对其进行初始化:

function clone(lhs, rhs) {
    for (i in rhs) {
        if (isarray(rhs[i])) {
            lhs[i][1] = ""
            delete lhs[i][1]
            clone(lhs[i], rhs[i])
        } else {
            lhs[i] = rhs[i]
        }
    }
}

手册页中提到了写入值然后删除它的技巧gawk

(我还使用 修复了数组检测isarray。)

相关内容