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
-o
la opción degrep
, 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
-E
usar expresiones regulares extendidas- El patrón requerido se captura
()
y\1
se utiliza en la sección de reemplazo. [0-9]*
después de que se elimine el grupo de captura
Otras lecturas: