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"]ただし、これは割り当て前に作成されなかったため、明らかには機能しません。 2番目の質問は、として入力する必要があることです。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。)

関連情報