web-dev-qa-db-ja.com

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
2
yael

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に自動スケーリングします。オプションの1文字のサフィックスを受け入れる:1K = 1024, 1M = 1048576, ...
  • --field=<FIELDS>-これらの入力フィールドの数値を置換/変換しますFIELDS
2
RomanPerekhrest

私の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/Gで終わるフィールド4の任意のパターンに一致します
  • $4/1 >= 18Gで終わる場合は、それを1で割り(Gを削除するため)、18以上かどうかを確認します。
  • $4~/.*T/、またはフィールド4の文字列がTで終わる場合は通過します。

注: RomanPerekhrestのソリューションはより堅牢です。

0
jesse_b