Arredondar / truncar casas decimais dentro da coluna

3

Parece haver vários métodos simples e simples para arredondar todos os números em uma coluna para 1 casa decimal, usando printf de awk ou mesmo printf de bash. No entanto, não consigo encontrar um método igualmente simples para apenas reduzir todos os números em uma coluna para 1 casa decimal (mas não arredondar para cima). O método mais simples para classificar isso no momento seria arredondar para duas casas decimais e depois remover o último caractere de cada linha da coluna 1. Alguém tem 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 
    
por Giles 26.09.2016 / 18:21

1 resposta

9

fácil o suficiente com grep

$ 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
  • \. corresponde ao caractere de ponto literal
  • [0-9] corresponde a um dígito
  • porque a opção -o de grep é usada, somente a parte correspondida é impressa, removendo efetivamente os caracteres restantes

Se houver outras colunas, use sed

$ 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]*//' ip.txt
123.4 a
1456.8 b
2536.5 c
345.9 d
23643.1 e
  • -E usa regex estendido
  • o padrão obrigatório é capturado em () e usado na seção de substituição
  • [0-9]* após o grupo de captura ser excluído

Leitura adicional:

por 26.09.2016 / 18:35