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.)

관련 정보