¿Por qué printf en awk reemplaza los decimales con ceros?

¿Por qué printf en awk reemplaza los decimales con ceros?

Tengo un archivo simple con algunos valores numéricos:

 2018-11-15 14:07:22      37.672     20.553        15.90   4.0 
 2018-11-17 09:15:46      37.519     20.692        13.80   4.0 
 2018-11-17 20:33:18      37.540     21.712         9.50   4.2 
 2018-11-18 05:18:02      37.391     20.516         0.00   4.3 
 2018-11-18 06:06:44      37.556     20.268         0.00   4.3 
 2018-11-19 05:56:51      37.565     20.678        14.60   4.2 
 2018-11-19 13:05:56      37.179     20.580         6.10   5.1 
 2018-11-19 16:16:41      37.167     20.571         0.10   4.0

Sólo quiero imprimir la tercera y cuarta columna con un decimal. Por eso hago:

    awk '{printf "%.1f %.1f\n",$3,$4}' myfile

El problema es que me da los valores con ceros en la parte decimal (esta salida es solo un ejemplo, no es la salida del input):

37,0 20,0
37,0 20,0
40,0 28,0
34,0 26,0
40,0 20,0
34,0 26,0
34,0 26,0
39,0 24,0
37,0 20,0
39,0 24,0
36,0 21,0
37,0 20,0
37,0 20,0
37,0 20,0

Realmente no sé qué está pasando...

Mi localidad es:

decimal_point=","
thousands_sep="."
grouping=-1;-1
numeric-decimal-point-wc=44
numeric-thousands-sep-wc=46
numeric-codeset="UTF-8"

Respuesta1

Como se insinuó en los comentarios, su configuración regional define la coma como el separador decimal correcto, y eso es lo que parece usar su awk.

ElDocumentación de GNU awkestablece que el estándar requiere hacer eso, pero (como aquí), a menudo se considera más un problema, por lo que GNU awk no lo hace de forma predeterminada, solo en modo POSIX o si se solicita con la --use-lc-numericopción.

$ LC_ALL=fi_FI.UTF-8 gawk '{printf "%.1f %.1f\n",$3,$4}' myfile |head -2
37.7 20.6
37.5 20.7

pero

$ LC_ALL=fi_FI.UTF-8 POSIXLY_CORRECT=1 gawk '{printf "%.1f %.1f\n",$3,$4}' myfile |head -2
37,0 20,0
37,0 20,0

Por supuesto, su awk puede tener costumbres diferentes, y el manual también menciona que las versiones anteriores de GNU awk también cumplían con el estándar aquí.

Consulte la documentación del awk que está utilizando, o simplemente configúrelo LC_NUMERIC=Ccuando lo ejecute para forzar la configuración regional predeterminada.

información relacionada