我正在尝试计算可用交换空间的百分比。使用这样的东西:
free | grep 'Swap' | awk '{t = $2; f = $4; print ($f/$t)}'
但awk
正在抛出:
awk: program limit exceeded: maximum number of fields size=32767
而且我真的不明白为什么,我的程序很简单,我有可能遇到奇怪的范围错误吗?
我正在尝试计算可用交换空间的百分比。使用这样的东西:
free | grep 'Swap' | awk '{t = $2; f = $4; print ($f/$t)}'
但awk
正在抛出:
awk: program limit exceeded: maximum number of fields size=32767
而且我真的不明白为什么,我的程序很简单,我有可能遇到奇怪的范围错误吗?
试试这个:
free | grep 'Swap' | awk '{t = $2; f = $4; print (f/t)}'
在您的代码中,您尝试打印 $f 和 $t,它们分别是 $FreeMemory 和 $TotalMemory。所以我猜你总共有大约 4gig ram,大约是 400000 美元,这比 awk 在标准配置中使用的字段总数略高。除了使用 meminfo 进行更简单的尝试之外,尝试仅打印引用变量的 f/t 并得到答案。
/proc/meminfo
请注意,使用'行读取信息可能更容易/更健壮SwapFree
。
就像是:
$ grep SwapFree /proc/meminfo | awk '{print $2}'
您不需要变量。你可以使用普通的
awk '{ print $4/$2 }'
从 /proc/meminfo 读取它:
lennart@trololol:~$ grep SwapFree /proc/meminfo | awk '{print $2}'
0
我意识到问题是关于使用“免费”和“awk”,但如果你有 SAR 运行,那么这会给你最近记录的百分比值:
sar -S|tail -2|head -1|awk '{print $5}'