Considere esta função:
function add_one(in_ar, each) {
for (each in in_ar) {
in_ar[each]++
}
}
Eu gostaria de modificá-lo de forma que, se um segundo array for fornecido, ele seja usado em vez de modificar o array de entrada. Eu tentei isso:
function add_one(in_ar, out_ar, each) {
if (out_ar) {
for (each in in_ar) {
out_ar[each] = in_ar[each] + 1
}
}
else {
for (each in in_ar) {
in_ar[each]++
}
}
}
BEGIN {
split("1 2 3 4 5", q)
add_one(q, z)
print z[3]
}
mas recebo este resultado:
fatal: attempt to use scalar `z' as an array
Existem 2 problemas no seu script
z
não é inicializadaif(out_ar)
em seu segundo trecho de código não é adequado para matrizesPara resolver o primeiro problema, você precisa atribuir um elemento de array (como
z[1]=1
) já que não há declaração de array em awk. (Você não pode usar uma declaração semelhantedeclare -A
como faria no bash).O segundo problema pode ser resolvido, desde que você esteja usando GNU awk, com a função
isarray()
outypeof()
.Então seu código deve ficar assim:
Eu recomendo olhar para esta página e esta página .