【问题标题】:Calculate percentage free swap space with `free` and `awk`使用 `free` 和 `awk` 计算可用交换空间百分比
【发布时间】:2012-10-08 09:28:16
【问题描述】:

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

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

但是awk 正在抛出:

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

我真的不明白为什么,我的程序很简单,会不会出现奇怪的范围错误?

【问题讨论】:

  • 在计算时直接使用 $4 和 $2 可以正常工作:免费 | grep 交换 | awk '{ 打印 ($4/$2)}'
  • grep 也是多余的:free | awk '/Swap/ { print $4/$2 }'

标签: linux awk ubuntu-12.04 swap


【解决方案1】:

试试这个:

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

在您的代码中,您尝试打印 $f 和 $t,它们分别是 $FreeMemory 和 $TotalMemory。所以我猜你总共有大约 4gig ram,大约是 400000 美元,这比 awk 在标准配置中使用的字段总数略高。除了使用 meminfo 进行更简单的尝试之外,请尝试仅打印引用变量的 f/t,然后您就会得到答案。

【讨论】:

    【解决方案2】:

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

    类似:

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

    【讨论】:

      【解决方案3】:

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

      awk '{ print $4/$2 }'
      

      【讨论】:

      • 酷!只写代码是最好的。请问可以教我吗?我的 awk 代码太易读了。我想学习如何去文档化和混淆它。
      • @Ark-kun:我倾向于在程序中使用变量和文档,而不是单行。您的里程可能会有所不同。
      • 使用预定义变量对于单行可能没问题,但如果变量已经存在(即使它们是单字母),我认为删除它们不好。附言我投了反对票,因为这不能回答问题。附言想删除我的反对票,因为您的代码解决了问题(即使您没有提到),但它已被锁定,抱歉=(答案应该是“从本地变量中删除美元符号”。
      【解决方案4】:

      从 /proc/meminfo 读取它:

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

      【讨论】:

      • 我想要免费交换的百分比!
      【解决方案5】:

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

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

      【讨论】:

      • 能否请您详细解释一下您的这个解决方案是如何工作的,以便更好地了解每个人
      • 这个答案与问题无关。
      • sar -S 提供有关交换使用情况的信息。 tail -2 得到最后 2 行。 head -1 删除平均值信息。 print $5 只给出交换的百分比值。这与回答这个问题有很大关系。不知道为什么愤怒的回应和反对票。别担心,我不会再在这里浪费时间了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2021-03-28
      • 2020-05-21
      • 2016-07-02
      相关资源
      最近更新 更多