Converte bytes em Megabytes ou Gigabytes para dados provenientes do comando

0

Eu sou um novato em scripts de shell. De qualquer forma, tenho o seguinte comando:

cat /proc/net/dev | tr -d ':,|' | awk 'NR >= 2 {print $1 " " $2 " " $10}'

Isso lista a seguinte saída:

face bytes packets

docker0 2341 387821

lo 208740 208740

enp2s0 53877345926 60003420684

Os dados acima são mostrados em bytes, eu quero que a saída seja em KB, MB ou GB, dependendo dos dígitos. Por exemplo,

face bytes packets

docker0 18.73 KB 3.10 MB

lo 1.67 MB 1.67 MB

enp2s0 431.02 GB 480.03 GB

Obrigado em avançado.

    
por john deo 27.02.2018 / 12:51

1 resposta

3

numfmt está fazendo a maior parte do levantamento abaixo. Você pode dizer o formato que deseja e, além disso, estou dizendo para pular a primeira linha e focar no segundo e no terceiro campo.

tail -n +2 /proc/net/dev \
| tr -d ':,|' \
| awk '{print $1 " " $2 " " $10}' \
| numfmt --to=iec --header=1 --field=2,3

Se você quer ser muito mais complicado do que isso, ou se você precisa disso para ter um desempenho melhor, eu estaria procurando uma linguagem de programação real. Todos eles têm bibliotecas disponíveis (ou construídas em funções) para fazer esse tipo de coisa e fazem isso muito mais rápido.

    
por Oli 27.02.2018 / 13:49