filtrar o comando lsblk usando awk ou grep

filtrar o comando lsblk usando awk ou grep

Preciso filtrar o resultado deste comando:

lsblk -rno "name,size,mountpoint,fstype" | grep -v 'sda'

Deixe-me dar o resultado do comando acima no meu computador:

sdb 223,6G
sdb1 179,8G /VMs/qemu ext4
sdb2 29,5G [SWAP] swap
sdc 15G  ntfs
sdd 7,5G
sdd1 7,5G  ext4

A filtragem que preciso é: Somente os que NÃO estão montados e os que possuem sistema de arquivos devem ser deixados. Então, idealmente, o que sobraria após a filtragem deveria ser:

sdc 15G  ntfs
sdd1 7,5G  ext4

Meu objetivo é ter um script (que pode ser chamado usando rofi do dmenu) para montar drives USB. Encontrei soluções na rede, mas o problema com elas é que elas assumem que todas as unidades possuem partições. Como você pode ver, eu uso unidades externas formatadas sem serem particionadas primeiro (o NTFS, por exemplo). Então eu preciso dessa mudança.

Responder1

Se você simplificar seu requisito para ser uma lista de partições que não estão montadas, mas que contêm um sistema de arquivos, você pode fazer isso usandoawk

lsblk -rno name,size,mountpoint,fstype | awk 'NF==3 {print $1, $3}'

O awkfiltro considera as linhas lsblkque possuem exatamente três campos separados por espaço e imprime o primeiro e o terceiro campo.

Exemplo de saída

lsblk -rno name,size,mountpoint,fstype
mmcblk0 29.8G
mmcblk0p1 63M  vfat
mmcblk0p2 4G / ext4

lsblk -rno name,size,mountpoint,fstype | awk 'NF==3 {print $1, $3}'
mmcblk0p1 vfat

Se você quiser tamanho também, basta omitir o seletor de saída

lsblk -rno name,size,mountpoint,fstype | awk 'NF==3'
mmcblk0p1 63M  vfat

informação relacionada