duda sobre awk

Alejandro Cofré alecofre.listas en gmail.com
Mar Jun 13 11:38:02 CLT 2006


On 5/12/06, Mar?a Isabel Mateos Berm?dez <
isabel.mateos en ses.juntaex.es> wrote:

>
>
>
> Hola a todos,

>
> Sabe alguien como puedo formatear n?meros en awk, por ejemplo:

>
> ?como puedo formatear n?meros del tipo
234556.03 a 234.556,03? Osea poder
> ponerle el punto de los miles y cambiar el . por un coma por si fuera

> decimal.

>
> Un saludo.
>
> Maribel


Aunque sea tardía la respuesta, puedes probar con la siguiente funcion:

function millares(a,d, z) {
#    argumentos: a : numero; d:decimales
    split(sprintf("%."d"f",a),b,".")
    largo = length(b[1])
    if( (length(b[1])%3) == 0) {
        grupos = int(length(b[1])/3)
    } else {
        grupos = int(length(b[1])/3)+1
    }
    w[1] = substr(b[1],1,length(b[1])-3*(grupos-1))
    z = w[1]
    for(i=2; i<=grupos; i++) {
        w[i] = substr(b[1],length(b[1])-3*(i-1)+1,3)
        z = z"."w[i]
    }
    if(d!=0) {
    z = z","b[2]
    }
    return z
}

Para incorporar una user-function en los scripts, se debe escribir al
principio de él, antes del cuerpo y del bloque BEGIN.
La definicion de la funcion separa los argumentos de las variables
internas. En este caso, los argumentos son a (el número en cuestion) y
d (el numero de decimales deseados). (Notese la separacion con un " "
para z).
La funcion se llama con los argumentos: millares(123456.2345,3) ==>
"123.456,235"

Alejandro Cofré
Curauma - Chile
--



Más información sobre la lista de distribución Linux