lsblk +特定サイズのディスクのみ印刷

lsblk +特定サイズのディスクのみ印刷

18G以上のすべてのディスクを印刷したいです。
ディスクのみを印刷するには、次の構文をどのように適用できますか? => 18G

lsblk -l  | awk '/disk/'

fd0            2:0    1     4K  0 disk
sda            8:0    0   150G  0 disk
sdb            8:16   0    20G  0 disk 
sdc            8:32   0    20G  0 disk 
sdd            8:48   0    20G  0 disk 
sde            8:64   0    20G  0 disk 
sdf            8:80   0    20G  0 disk 
sdg            8:96   0    20G  0 disk
sdh            8:112  0    20G  0 disk
sdi            8:128  0    20G  0 disk
sdj            8:144  0    2G   0 disk
sdk            8:160  0    2G   0 disk

答え1

lsblk+awk+numfmt解決策:

lsblk -lnb | awk '$4>=19327352832' | numfmt --to=iec --field=4

lsblkオプション:

  • -n- ヘッダー行を印刷しない
  • -b- 人間が読める形式ではなく、SIZE列をバイト単位で印刷します。

awk詳細:

  • $4- 4番目のフィールド値(SIZE列)
  • 19327352832-18Gバイト単位と同じ

numfmtオプション:

  • --to=iec- 出力数量の自動スケーリングは、オプションの単一UNITs文字のサフィックスを可能にします。1K = 1024, 1M = 1048576, ...
  • --field=<FIELDS>- この入力フィールドの数値の変更/変換FIELDS

答え2

私はlsblkうまくいきませんが、あなたには効果がありますか?

lsblk -l | awk '{
    if ($4~/.*G/ && $4/1 >= 18) || 
       ($4~/.*T/)
       print $0;
    }'

#As a single line:
lsblk -l | awk '{if ($4~/.*G/ && $4/1 >= 18) || ($4~/.*T/){print $0}}'

awkプログラム

  • $4~/.*G/次に、終了するフィールド4のすべてのパターンと一致します。G
  • $4/1 >= 18で終わる場合は、分割し(Gを削除)、次G1値以上であることを確認します。18
  • $4~/.*T/あるいは、フィールド4の文字列がTそれで終わる場合に渡されます。

メモ: RomanPerekhrestのソリューションはより強力です。

関連情報