Parece haver vários métodos simples e simples para arredondar todos os números em uma coluna para 1 casa decimal, usando o printf do awk ou mesmo o printf do bash. No entanto, não consigo encontrar um método igualmente simples para reduzir todos os números em uma coluna para 1 casa decimal (mas não arredondar). O método mais simples para classificar isso no momento seria arredondar para 2 casas decimais e remover o último caractere de cada linha da coluna 1. Alguém conseguiu um método melhor para isso? Um exemplo de entrada e saída seria o seguinte:
Entrada
123.434
1456.8123
2536.577
345.95553
23643.1454
Saída
123.4
1456.8
2536.5
345.9
23643.1
Responder1
bastante fácil comgrep
$ 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
^
início da linha[0-9]*
zero ou mais dígitos\.
corresponder ao caractere de ponto literal[0-9]
corresponder a um dígito- como
-o
a opção degrep
é usada, apenas a parte correspondente é impressa, removendo efetivamente os caracteres restantes
Se houver outras colunas, usesed
$ 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 regex estendido- o padrão necessário é capturado
()
e\1
usado na seção de substituição [0-9]*
depois que o grupo de captura for excluído
Leitura adicional: