awk 또는 grep을 사용하여 lsblk 명령 필터링

awk 또는 grep을 사용하여 lsblk 명령 필터링

이 명령의 결과를 필터링해야 합니다.

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

내 컴퓨터에서 위 명령의 결과를 알려드리겠습니다.

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

나에게 필요한 필터링은 마운트되지 않은 것과 파일 시스템이 남아 있는 것들만 필터링하는 것입니다. 따라서 이상적으로 필터링 후 남은 것은 다음과 같습니다.

sdc 15G  ntfs
sdd1 7,5G  ext4

내 목표는 USB 드라이브를 마운트하기 위한 스크립트(dmenu의 rofi를 사용하여 호출할 수 있음)를 갖는 것입니다. 온라인에서 몇 가지 솔루션을 찾았지만 이러한 솔루션의 문제점은 모든 드라이브에 파티션이 있다고 가정한다는 것입니다. 보시다시피 저는 먼저 파티션이 나누어지지 않은 외장 드라이브(예: ntfs)를 사용합니다. 그래서 나에게는 이런 변화가 필요하다.

답변1

마운트되지는 않았지만 파일 시스템을 포함하는 파티션 목록으로 요구 사항을 줄이면 다음을 사용할 수 있습니다.awk

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

이 필터는 awk공백으로 구분된 세 개의 필드가 포함된 행을 고려하여 첫 번째 및 세 번째 필드를 인쇄합니다.lsblk

샘플 출력

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

크기도 원하면 출력 선택기를 생략하세요.

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

관련 정보