使用`free`和`awk`计算百分比自由交换空间

我试图计算可用交换空间的百分比。 使用这样的东西:

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的内存,这个数字大约是400000美元,比awk在标准配置中使用的字段总数还要多一点。 除了使用meminfo的简单尝试之外,还可以尝试打印指向变量的f / t,然后获得答案。

请注意,使用/proc/meminfoSwapFree行来读取信息可能更容易/更强大。

就像是:

 $ 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}'