filtrar el comando lsblk usando awk o grep

filtrar el comando lsblk usando awk o grep

Necesito filtrar el resultado de este comando:

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

Permítanme darles el resultado del comando anterior en mi computadora:

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

El filtrado que necesito es: Sólo quedar los que NO están montados y los que tienen sistema de archivos. Entonces, idealmente lo que quedaría después del filtrado debería ser:

sdc 15G  ntfs
sdd1 7,5G  ext4

Mi objetivo es tener un script (al que se puede llamar usando rofi de dmenu) para montar unidades USB. He encontrado soluciones erróneas en la red, pero el problema con ellas es que suponen que todas las unidades tienen particiones. Como ves, uso discos externos formateados sin estar particionados primero (los ntfs por ejemplo). Entonces necesito este cambio.

Respuesta1

Si simplifica su requisito para que sea una lista de particiones que no están montadas pero que contienen un sistema de archivos, puede hacerlo usandoawk

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

El awkfiltro considera líneas lsblkque tienen exactamente tres campos separados por espacios e imprime el primer y tercer campo.

Salida de muestra

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

Si también quieres el tamaño, simplemente omite el selector de salida.

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

información relacionada