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- 第四个字段值(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,则将其除以1(删除 G)并检查它是否大于或等于18
  • $4~/.*T/或者如果字段 4 中的字符串以T它结尾,则通过。

笔记: RomanPerekhrest 的解决方案更加稳健。

相关内容