Você precisa inicializar o subarray antes de clonar:
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]
}
}
}
O truque write-then-delete é mencionado na página gawk
man.
(Eu também consertei a detecção do array, usando isarray
.)