[Não é realmente uma resposta - mas grande demais para um comentário]
Eu acho que o comportamento que você está vendo está relacionado ao primeiro átomo do seu FPAT
- que potencialmente tem uma correspondência de comprimento zero, ou seja, ([^,])*
correspondências zero ou mais caracteres não-vírgula - mas exatamente como está relacionado me ilude neste momento. Considere por exemplo (GNU Awk 4.0.1):
$ echo "a,b,c,d,e,f,g,h,i,j,k,l,\"m,n\"" |
gawk '
BEGIN{FPAT="([^,])*|(\"[^\"]+\")";OFS=","}
{print $0; $4=$4; print $0; print NF}
' a,b,c,d,e,f,g,h,i,j,k,l,"m,n"
a,b,c,d,,e,f,g,h,i,j,k,l,"m,n"
14
ao passo que se acessarmos o valor de NF
antes da reatribuição
$ echo "a,b,c,d,e,f,g,h,i,j,k,l,\"m,n\"" |
gawk '
BEGIN{FPAT="([^,])*|(\"[^\"]+\")";OFS=","}
{print $0; print NF; $4=$4; print $0; print NF}
'
a,b,c,d,e,f,g,h,i,j,k,l,"m,n"
13
a,b,c,d,e,f,g,h,i,j,k,l,"m,n"
13
Independentemente disso, o comportamento parece não ser ambíguo se você alterar FPAT
para corresponder apenas a seqüências não vazias:
$ echo "a,b,c,d,e,f,g,h,i,j,k,l,\"m,n\"" |
gawk '
BEGIN{FPAT="([^,]+)|(\"[^\"]+\")";OFS=","}
{$4="TDP,-1,-1,0,0" OFS $4; print $0}
'
a,b,c,TDP,-1,-1,0,0,d,e,f,g,h,i,j,k,l,"m,n"