Em relação a esta postagem: resumir números com sufixos KB/MB/GB/TB/PB...
Eu tenho algumas máquinas que possuem versões antigas do Debian e não podem ser atualizadas para uma versão mais recente do Debian, o que significa que o coreutils
pacote não contém arquivos numfmt
. Tentei encontrar outra maneira de obtê-lo (machine is Debian 7.6)
, mas sou forçado a usar outra maneira de obter o tamanho do meu disco.
Atualmente estou usando o seguinte:
lshw -class disk -class storage | grep size: | cut -d "(" -f2 | cut -d ")" -f1 | sed -e 's/[^0-9]/ /g' | paste -sd+ | bc
Posso facilmente obter o tamanho, mas preciso obter GB / TB ou até MB para ele também.
Se eu usar:
lshw -class disk -class storage | grep size: | cut -d "(" -f2 | cut -d ")" -f1
eu recebo
160GB
160GB
Em minhas outras máquinas, obteria um exemplo:
2TB
2TB
2TB
Existe uma maneira de salvar a palavra após os números em uma variável e depois imprimi-la?
Além disso, para eliminar a chance de uma máquina ter várias unidades com tamanhos diferentes, como
500GB
2TB
3TB
Dessa forma, meu comando infelizmente não funciona, daria a você505.
Não tenho o
lshw
comando à mão, então falsifiquei alguns da seguinte maneira:(Encontrei um exemplo online e simplesmente copiei as linhas "size:" e criei alguns tamanhos).
Eu usei awk aqui porque uma vez que você encontra
grep
ping ecut
ting esed
ing, geralmente é mais fácil combinar toda essa lógica em arquivosawk
.O script awk abaixo define os separadores de campo (
FS
) para abrir e fechar parênteses, para que seja mais natural retirar o valor desejado. Ele também (redundantemente) inicializa o tamanho total em execução (em Gb) para zero.Cada vez que o awk vê uma linha de entrada que corresponde à expressão regular (simples),
size:
ele começa o trabalho real dentro das chaves. O valor dentro dos parênteses termina no campo #2, então pedimos ao awk para combinar os dígitos naquele campo. Esperamos que eles comecem na posição 1, para algum número de caracteres. O valor é então extraído com base nesse comprimento e o sufixo é o restante da string.Em seguida, analisamos a lista de possíveis sufixos (estendemos conforme necessário) e multiplicamos o tamanho atual pela proporção apropriada (mencionado por Stéphane em um comentário sobre uma resposta atualmente excluída como 1000 unidades baseadas).
Depois que toda a entrada foi consumida, o awk imprime o tamanho total em GB.
Salve o script em um arquivo e execute-o como
Roteiro: