我想打印所有等于或大于 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 的解决方案更加稳健。