Como usar o Awk para formatar números com um separador de milhar

7

Alguém pode me dizer como usar o comando awk para esta declaração "o número irá conter vírgulas após cada três dígitos. Por exemplo, 100000000 se tornará 100.000.000."

Eu sei como usar o comando sed para obter essa saída, mas eu não sei como usar o awk, eu sou iniciante, por favor me diga que estou procurando de manhã, mas não obtive uma resposta adequada para isso por favor me sugira melhores tutoriais para aprender.

comando sed para obter a saída acima:

echo "100000000" | sed -E 's/([0-9]{3})/,/2g'
    
por Error3735 13.12.2015 / 18:51

1 resposta

10

Uma solução independente de localidade com formatação manual

Isso deve funcionar em qualquer sistema operacional compatível com POSIX, independentemente das localidades instaladas.

$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| awk '{ len=length($0); res=""; for (i=0;i<=len;i++) { res=substr($0,len-i+1,1) res; if (i > 0 && i < len && i % 3 == 0) { res = "," res } }; print res }'
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000

Uma solução que usa printf e a localidade en_US.

A printf sequence %'d imprime um número inteiro decimal formatado com o separador de milhares da localidade atual.

$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| LC_ALL=en_US.UTF-8 awk '{ printf("%'"'"'d\n", $0) }'
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
    
por 13.12.2015 / 19:26