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スペースで区切られた3つのフィールドを含む行を考慮して、最初と3番目のフィールドを印刷します。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

おすすめ記事