我正在尝试获取占用空间较高的文件系统。我正在尝试使用df
带有标志的命令-g
(千兆字节视图)来执行此操作,但无法获得预期值。
df -g | sed 's/%//g'| awk '+$5>=75 {print}' | head -10
使用下面的命令我收到错误:
df -g | sed 's/%//g'| awk '{print $5>=75}' | head -4
错误信息:
Syntax Error The source line is 1.
The error context is
{print >>> $5>= <<<
awk: 0602-502 The statement cannot be correctly parsed. The source line is 1.
以下是 AIX 上 df -g 命令的输出:
/tmp>df -g | sed 's/%//g'| awk '$5 >= 75 { print }' | head -4
Filesystem GB blocks Free Used Iused Iused Mounted on
/dev/hd4 10.50 10.05 5 16492 1 /
/dev/hd2 25.50 18.15 29 64361 2 /usr
/dev/hd9var 2.50 0.72 72 4521 3 /var
完整视图:
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/hd4 10.50 10.05 5% 16492 1% /
/dev/hd2 25.50 18.15 29% 64357 2% /usr
/dev/hd9var 2.50 1.39 45% 4512 2% /var
/dev/hd3 21.50 20.24 6% 1495 1% /tmp
我在 AIX 7.1 PowerPC_POWER8 上尝试过。我不知道我做错了什么!
答案1
不要使用tr
andawk
两次,只需使用 awk 一次:
df -g | awk '{ sub("%", "", $4); if ($4 >= 75) { print $4, $7 }}' | sort -n
这会将字段 4 中的百分号替换为空字符串(将其剥离);如果剩余值至少为 75,则打印字段 4 和 7,然后通过管道将它们排序。
基于记忆的改进斯特凡的答案之一:
df -g | awk '$4+0 >= 75 { print $4, $7 }' | sort -n
“+0”加法强制进行数字比较,而不是严格基于字符串的比较。
如果您想保留标题,请将条件更改为:
df -g | awk 'NR < 2 || $4+0 >= 75 { print $4, $7 }' | sort -n
答案2
专注于awk
代码:
awk '{print $5>=75}'
这大概应该是
awk '$5 >= 75 { print }'
如果第五个字段的数值大于或等于 75,则输出当前输入记录。
从您得到的输出来看,您可能想要检查$4
而不是$5
虽然,因为我认为它是包含百分比的第四个字段:
df -g | tr -d '%' | awk '$4 >= 75 { print }' | head -4
查看错误消息:awk
在 OpenBSD 上使用(似乎以与 AIX 完全相同的方式抱怨awk
),原始代码有一个语法错误,因为它无法打印$5 >= 75
(除非放在括号内,在这种情况下它将计算为0(假)或 1(真))。mawk
行为相同。
GNUawk
接受原始代码中的语法,但显然仍然不是您想要的。
答案3
这是错误...“文件系统 GB 块空闲已使用 Iused Iused 安装在”
解决办法是:
# df -g | grep Filesystem | sed 's/%//g'| awk '{print $5>=75}' | head -4