Formatando números usando awk / print

0

Eu encontrei este código muito legal para obter a velocidade de upload / download:

awk '{ if (l1) {
        print "↓"($2-l1)/1024"kB/s ","↑"($10-l2)/1024"kB/s"
    } else {
        l1=$2; l2=$10;
    }
}' <(grep wlan0 /proc/net/dev) <(sleep 1; grep wlan0 /proc/net/dev)

No entanto, retorna até 4 casas decimais. Eu prefiro não ter números decimais. Eu já consegui arredondar números usando bc ou < href="https://stackoverflow.com/questions/13632001/how-to-display-number-to-two-decimal-places-in-bash-function"> printf , mas eu pareço apenas poderá usar print em awk . O que é uma boa solução para esse problema?

    
por user 19.05.2014 / 21:35

2 respostas

2
#!/bin/awk -f
{
     if (l1) {
             printf("↓ %.2f kB/s ↑ %.2f kB/s\n" \
               , ($2 - l1) / 1024, ($10 - l2) / 1024)
     } else {
             l1 = $2;
             l2 = $10;
     }
}

%.2f é um número de ponto flutuante com duas casas decimais. Use %.0f ou %i (integer) para exibir apenas a parte integral.

    
por 19.05.2014 / 22:41
1

Adicione %.0f ao seu extrato impresso.

Exemplo

echo "5.54" | awk '{printf "%.0f\n", $1}'

fornece a saída como 6.

echo "5" | awk '{printf "%.0f\n", $1}'

fornece a saída como 5.

    
por 19.05.2014 / 21:41

Tags