2008/3/5 Thiago Caminha da Silva <[EMAIL PROTECTED]>:
[cut]
>  echo "11460.00" | tr '.' ','
>
>  decimal=(`echo "11460,00" | awk -F"," '{ print $2 }'`)
>  inteiro=(`echo "11460,00" | awk -F"," '{ print $1 }'`)
>
>  inteiro=`echo $inteiro |sed -e ':b;
>  s/\([0-9]\)\([0-9]\{3\}\($\|\.\)\)/\1.\2/; t b'`
[cut]

Olá,

segue um oneliner:

echo `echo $1 | cut -d. -f1 | rev | sed 's/.../&./g;s/\.$//' |
rev`,`echo $1 | cut -s -d. -f2`

* cut -d. -f1 extrai a parte inteira
* cut -s -d. -f2 a parte decimal, o -s ignora o resultado se nao tiver
parte decimal
* o rev inverte a string (facilita a ER do sed)
* sed 's/.../&./g;s/\.$//'  a cada 3 char's imprime os mesmos e
acrescente um ponto, a segunda ER remove um qualquer ponto final
perdido
* o outro rev acerta a ordem do número novamente
* o echo imprime a parte inteira "tratada" e a parte decimal

Exemplo:

$ sh teste 12345678.90
12.345.678,90
---------------------------------------------------------------------------
Esta lista é patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br

Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utilização da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html

Responder a