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