Linux 使用“free”和“awk”计算可用交换空间的百分比`

Linux 使用“free”和“awk”计算可用交换空间的百分比`,linux,awk,ubuntu-12.04,swap,Linux,Awk,Ubuntu 12.04,Swap,我正在计算可用的可用交换空间的百分比。 使用类似这样的方法: free | grep 'Swap' | awk '{t = $2; f = $4; print ($f/$t)}' 但是awk正在抛出: awk: program limit exceeded: maximum number of fields size=32767 我真的不明白为什么,我的程序很简单,有可能我有一个奇怪的范围错误吗?你不需要变量。你可以用普通的 awk '{ print $4/$2 }' 请注意,使用/pro

我正在计算可用的可用交换空间的百分比。 使用类似这样的方法:

free | grep 'Swap' | awk '{t = $2; f = $4; print ($f/$t)}'
但是
awk
正在抛出:

awk: program limit exceeded: maximum number of fields size=32767

我真的不明白为什么,我的程序很简单,有可能我有一个奇怪的范围错误吗?

你不需要变量。你可以用普通的

awk '{ print $4/$2 }'

请注意,使用
/proc/meminfo
SwapFree
行读取信息可能更容易/更可靠

比如:

$ grep SwapFree /proc/meminfo | awk '{print $2}'

从/proc/meminfo中读取:

lennart@trololol:~$ grep SwapFree /proc/meminfo | awk '{print $2}'
0
试试这个:

free | grep 'Swap' | awk '{t = $2; f = $4; print (f/t)}'

在您的代码中,您试图打印$f和$t,这分别是$FreeMemory和$TotalMemory。所以我猜你总共有大约4gig内存,这意味着大约400000美元,这比awk在标准配置中使用的字段总数略高。除了使用meminfo更容易的尝试外,请尝试打印f/t,其中引用了变量,然后您就可以得到答案。

我意识到问题是关于使用“免费”和“awk”,但如果您运行SAR,那么这将为您提供最近记录的百分比值:

sar -S|tail -2|head -1|awk '{print $5}'

在计算时直接使用$4和$2可以很好地工作:free | grep Swap | awk'{print($4/$2)}
grep
也是多余的:
free | awk'/Swap/{print$4/$2}
我想要免费交换的百分比!酷!只写代码是最好的。你能教我吗?我的awk代码可读性太强。我想学习如何去编写文档并将其混淆。@Ark kun:我倾向于在程序中使用变量和文档,而不是在一行程序中使用。您的里程数可能会有所不同。使用预定义变量可能适合一行程序,但如果变量已经存在(即使它们是单字母),我认为删除它们并不好。我投了反对票,因为这不能回答问题。P.P.S.想删除我的否决票,因为你的代码解决了这个问题(尽管你没有提到),但是它被锁定了,抱歉=(答案应该是“从你的局部变量中删除美元符号”。你能详细解释一下你的这个解决方案是如何更好地理解每个人的吗?这个答案与问题无关。sar-S提供有关掉期使用的信息。tail-2获取最后2行。head-1删除平均值信息。print$5只给出掉期的百分比值。这与回答有很大关系问这个问题。不知道为什么会有愤怒的回应和反对票。别担心,我不会再在这里浪费时间了。