Saltar al contenido

Problema de formato y redondeo de números con awk

Te sugerimos que pruebes esta resolución en un ambiente controlado antes de pasarlo a producción, saludos.

Solución:

... | awk ' sum+=$1 END  print sum/NR'

Por defecto, (GNU) awk imprime números con hasta 6 dígitos significativos (más la parte del exponente). Esto viene del valor por defecto del OFMT variable. No dice eso en los documentos, pero esto solo se aplica a números con valores no enteros.

podrías cambiar OFMT para afectar a todos print declaraciones, o más bien, simplemente usar printf aquí, por lo que también funciona si el promedio resulta ser un número entero. Algo como %.3f imprimiría los números con tres dígitos después del punto decimal.

...| awk ' sum+=$1 END  printf "%.3fn", sum/NR '

Consulte los documentos para conocer el significado de la f y gy el modificador de precisión (.prec en el segundo enlace):

  • https://www.gnu.org/software/gawk/manual/html_node/Control-Letters.html
  • https://www.gnu.org/software/gawk/manual/html_node/Format-Modifiers.html
awk 'NR == 1  max=$1; min=$1; sum=0  ...'

Esto no se inicializa NR. En su lugar, comprueba si NR es igual a uno, es decir, estamos en la primera línea. (== es comparación, = es asignación.) Si es así, inicializa max, min y sum. Sin eso, max y min comenzaría como ceros. Nunca podría tener un valor máximo negativo o un valor mínimo positivo.

Si usa GNU awk, prueba esto. Añade las comas haciendo uso de la ' modificador

$ awk 'sum+=$1ENDprintf "%'''.2fn",sum/NR' filename
1,316,375.05
$

si tienes jqprueba esto.

$ jq -s min,max,add/length filename
1153022
1439480
1316375.05
$

De gnu.org: modificadores de formato gawk

Un carácter de comillas simples o apóstrofes es una extensión POSIX de ISO C. Indica que la parte entera de un valor de coma flotante, o la parte entera de un valor decimal entero, debe tener un carácter separador de miles. Esto solo funciona en entornos locales que admitan dichos caracteres. Por ejemplo:

Sección de Reseñas y Valoraciones

Nos puedes añadir valor a nuestra información tributando tu veteranía en las anotaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *