Exclui uma matriz no awk

14

No awk, posso limpar um array com um loop, tornando-o um array vazio, o que equivale a excluí-lo.

for (key in array) delete array[key];

Existe uma maneira mais simples? Posso apagar completamente uma matriz, para que o nome da variável possa ser reutilizado para um escalar?

    
por Gilles 02.08.2014 / 02:40

1 resposta

23

A sintaxe

delete array

não está nas versões atuais no POSIX, mas é suportado virtualmente por todas as implementações existentes (incluindo o original awk, GNU, mawk e BusyBox). Ele será adicionado em uma versão futura do POSIX (veja defeito 0000544 ).

Uma maneira alternativa de limpar todos os elementos da matriz, que é compatível com o padrão e portátil, e que é uma expressão em vez de uma declaração, é confiar em split da exclusão de todos os elementos existentes:

split("", array, ":")

Todos estes, incluindo delete array , deixam a variável marcada como sendo uma variável array no awk original, no GNU awk e no mawk (mas não no BusyBox awk). Tanto quanto eu sei, uma vez que uma variável tenha sido usada como uma matriz, não há como usá-la como uma variável escalar.

    
por 02.08.2014 / 02:40

Tags