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}'

フィルターは、スペースで区切られた 3 つのawkフィールドを持つ行を考慮しlsblk、最初のフィールドと 3 番目のフィールドを出力します。

サンプル出力

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

関連情報