AWK com uma casa decimal

4

Meu script atual está dando saída com muitas casas decimais. Existe alguma maneira de obter apenas um lugar na saída?

# cat sample
HDD Used: 15.0223T
HDD Total: 55.9520T

# cat sample | awk ' /HDD Total/ { hdd_total=$NF }
      /HDD Used/ { hdd_used=$NF }
      END {
        used=hdd_total-hdd_used
        print "cal =" used}'

Saída atual

cal =40.9297

Resultado obrigatório em cal =40.9 --- > Com apenas um decimal

Obtendo erro para isso

# isi storagepool list -v| grep -i 'HDD Total:' | awk '{print "HDD Total=%.1f", $NF -1 " TB" }'
HDD Total=%.1f 54.952 TB
#cat isistorage1 
7.332T     n/a (R)   13.01% (T)

# cat isistorage1 |  awk '{ print "Snapshot USED=", $1}'
Snapshot USED= 7.332T
    
por Shanker 02.08.2017 / 10:25

2 respostas

9

Você pode usar printf "cal =%.1f\n", used em vez de ter controle de modificadores de tipo de impressão e área.

O .1f significa que, apenas imprimir 1 casa decimal após um ponto flutuante, você pode alterá-lo para qualquer número que você quiser em casas decimais.

    
por 02.08.2017 / 10:29
2

Você pode dizer ao awk qual conversão de ponto flutuante deve ser usada, definindo CONVFMT , o padrão é %.6g , por exemplo:

cat sample | awk -v CONVFMT='%.1f' '
/HDD Total/ { hdd_total = $NF }
/HDD Used/  { hdd_used  = $NF }
END {
  used=hdd_total-hdd_used
  print "cal = " used
}'

Saída:

cal = 40.9
    
por 02.08.2017 / 12:20

Tags