Arredondamento para o número mais próximo

1

Eu tenho um arquivo com dados como este

vserver-1 vserver-1_root 0.95 0.0019043 0.948047
vserver-1 home  10.00 8.25 1.75
vserver-1 usr 95 45.65 39.35
vserver-1 file0 100 89.15 10.85

Saída formatada desejada com awk (arredondando para o número inteiro mais próximo)

vserver-1 vserver-1_root 1 0 1
vserver-1 home  10 8 2
vserver-1 usr 95 46 39
vserver-1 file0 100 89 11
    
por user1400953 17.05.2018 / 08:29

3 respostas

1

usar %0.f é a maneira mais simples de converter o valor float para o número inteiro mais próximo:

awk '{printf ("%s %s %.0f %.0f %.0f\n",$1,$2,$3,$4,$5)}' file
    
por 17.05.2018 / 08:59
2

Supondo que você tenha corrigido o arquivo de 5 colunas, faça o seguinte:

awk '{printf("%s %s %d %d %d\n",$1, $2, $3+.5, $4+.5, $5+.5)}' infile

Isso adiciona 0,5 aos campos, em seguida, %d removerá a parte fracionária, resultando no arredondamento normal para o inteiro mais próximo, com metades (por exemplo, 2,5) arredondadas.

    
por 17.05.2018 / 08:37
0

para arredondar, use +0,5 e imprima via %d

echo "$number" | awk '{ printf("%d", $1 + 0.5) }'

Para a sua string,

vserver-1 vserver-1_root 0.95 0.0019043 0.948047 vserver-1 home 10.00 8.25 1.75 vserver-1 usr 95 45.65 39.35 vserver-1 file0 100 89.15 10.85

use este comando:

awk '{printf "%s %s %d %d %d %s %s %d %d %d %s %s %d %d %d %s %s %d %d %d\n" , $1, $2, $3+0.5, $4+0.5, $5+0.5, $6, $7, $8+0.5, $9+0.5, $10+0.5, $11, $12, $13+0.5, $14+0.5, $15+0.5, $16, $17, $18+0.5, $19+0.5, $20+0.5}' filename
    
por 17.05.2018 / 08:45