lsblk + imprime apenas discos com tamanho específico

2

Quero imprimir todos os discos iguais ou maiores que 18G | como ajustar a seguinte sintaxe para imprimir apenas os discos que são = > 18G

lsblk -l  | awk '/disk/'

fd0            2:0    1     4K  0 disk
sda            8:0    0   150G  0 disk
sdb            8:16   0    20G  0 disk 
sdc            8:32   0    20G  0 disk 
sdd            8:48   0    20G  0 disk 
sde            8:64   0    20G  0 disk 
sdf            8:80   0    20G  0 disk 
sdg            8:96   0    20G  0 disk
sdh            8:112  0    20G  0 disk
sdi            8:128  0    20G  0 disk
sdj            8:144  0    2G   0 disk
sdk            8:160  0    2G   0 disk
    
por yael 24.12.2017 / 14:08

2 respostas

2

lsblk + awk + solução numfmt :

lsblk -lnb | awk '$4>=19327352832' | numfmt --to=iec --field=4

lsblk opções:

  • -n - não imprime uma linha de cabeçalho
  • -b - imprime a coluna SIZE em bytes em vez de um formato legível por humanos

awk detalhes:

  • $4 - o quarto valor do campo ( SIZE column)
  • 19327352832 - equivalente a 18G em unidades de bytes

numfmt opções:

  • --to=iec - dimensiona automaticamente os números de saída para UNITs ; Aceitar sufixo de letra única opcional: 1K = 1024, 1M = 1048576, ...
  • --field=<FIELDS> - substituir / transformar os números nesses campos de entrada FIELDS
por 24.12.2017 / 14:28
0

Meu lsblk não funciona, mas isso funciona para você?

lsblk -l | awk '{
    if ($4~/.*G/ && $4/1 >= 18) || 
       ($4~/.*T/)
       print $0;
    }'

#As a single line:
lsblk -l | awk '{if ($4~/.*G/ && $4/1 >= 18) || ($4~/.*T/){print $0}}'

awk program

  • $4~/.*G/ está correspondendo a qualquer padrão no campo 4 que termina em G
  • $4/1 >= 18 se terminar em G , divida por 1 (para remover o G) e verifique se é maior ou igual a 18
  • $4~/.*T/ ou se a string no campo 4 terminar em T .

Nota: A solução de RomanPerekhrest é mais robusta.

    
por 24.12.2017 / 14:22