Até onde eu sei, não há texto standard documentando os efeitos colaterais da configuração de NF
, ou mesmo se a configuração é permitida. O manual do Gawk (também publicado como Effective awk
Programming ), que diz que tenta documentar Awk em geral e não (somente) a implementação GNU, inclui o seguinte :
Decrementing
NF
throws away the values of the fields after the new value ofNF
and recomputes$0
. (d.c.)
com a advertência
CAUTION: Some versions of
awk
don’t rebuild$0
whenNF
is decremented.
A menção "(dc)" significa que este é um "canto escuro" de Awk , ie um que é mal documentado (ou não é) e onde o comportamento pode variar de uma implementação para outra.
POSIX define variáveis especiais como
variables that are set by awk
mas não especifica se podem ser definidos por programas (como regra geral). Algumas das especificações das variáveis mencionam que podem ser modificadas (veja ARGC
, ARGV
), outras que as conseqüências de alterá-las são definidas pela implementação ( ENVIRON
), outras ainda não mencionam nada, mas são "Obviamente" destinado a ser modificado pelo programa ( OFS
etc.).
No caso de NF
, a experimentação dá uma resposta parcial:
- modificar
NF
funciona conforme documentado no GNU Awk emawk
também se comporta da mesma maneira; - as alterações para
NF
em O One True Awk são preservadas, mas não fazer com que$0
seja recalculado.
Então, eu diria que
- A configuração de
NF
é permitida, mas pode não ter efeitos colaterais além de definir o valor. - Como a definição
$0
é especificada por POSIX, a última variante está correta de acordo com a especificação. (É discutível se é o correto, pois ele perde$0
.)
A função em Como você converte uma matriz em uma string no awk? é interessante, mas como definido depende nas extensões GNU Awk e, portanto, não é uma resposta para essa pergunta.
(Outras variáveis que podem ser definidas, surpreendentemente, incluem NR
e FNR
, inclusive em TOTA. FILENAME
, no entanto, não pode ser definido, ou melhor, definindo seu valor.) / p>