Redondear hacia abajo/truncar decimales dentro de la columna

Redondear hacia abajo/truncar decimales dentro de la columna

Parece haber una serie de métodos sencillos y claros para redondear todos los números de una columna a 1 decimal, utilizando printf de awk o incluso printf de bash. Sin embargo, no puedo encontrar un método igualmente simple para reducir todos los números de una columna a 1 decimal (pero no redondearlos). El método más simple para ordenar esto en este momento sería redondear a 2 decimales y luego eliminar el último carácter de cada línea en la columna 1. ¿Alguien tiene un método mejor para esto? Un ejemplo de entrada y salida sería el siguiente:

Aporte

123.434    
1456.8123  
2536.577    
345.95553  
23643.1454  

Producción

123.4    
1456.8  
2536.5    
345.9  
23643.1 

Respuesta1

bastante fácil congrep

$ cat ip.txt 
123.434
1456.8123
2536.577
345.95553
23643.1454    

$ grep -o '^[0-9]*\.[0-9]' ip.txt 
123.4
1456.8
2536.5
345.9
23643.1
  • ^inicio de línea
  • [0-9]*cero o más dígitos
  • \.coincidir con el carácter de punto literal
  • [0-9]coincidir con un dígito
  • dado que se utiliza -ola opción de grep, solo se imprime la parte coincidente, eliminando efectivamente los caracteres restantes

Si hay otras columnas, utilicesed

$ cat ip.txt 
123.434 a
1456.8123 b
2536.577 c
345.95553 d
23643.1454 e

$ sed -E 's/^([0-9]*\.[0-9])[0-9]*/\1/' ip.txt
123.4 a
1456.8 b
2536.5 c
345.9 d
23643.1 e
  • -Eusar expresiones regulares extendidas
  • El patrón requerido se captura ()y \1se utiliza en la sección de reemplazo.
  • [0-9]*después de que se elimine el grupo de captura

Otras lecturas:

información relacionada