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
NFthrows away the values of the fields after the new value ofNFand recomputes$0. (d.c.)
com a advertência
CAUTION: Some versions of
awkdon’t rebuild$0whenNFis 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
NFfunciona conforme documentado no GNU Awk emawktambém se comporta da mesma maneira; - as alterações para
NFem O One True Awk são preservadas, mas não fazer com que$0seja 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>