BASH 脚本帮助使用 TOP、GREP 和 CUT

BASH script help using TOP, GREP and CUT

使用重复 5 次的 Top 命令,将结果通过管道传输到 GrepCut命令在屏幕上打印 init 进程的 PID。

大家好,我有我的代码行:

top -n 5 | grep "init" | cut -d" " -f3 > topdata

但是我看不到任何输出来验证它是否正常工作。 此外,下一个脚本要求我使用一行命令显示以兆字节为单位使用的总内存。我应该将结果从 Free 传输到 Grep 到 select 或使用模式 "Total:" 过滤行,然后将该结果通过管道传输到 Cut 并显示表示已使用的总内存的数字。到目前为止:

free -m -t | grep "total:" | cut -c25-30

也没有在那个上面打印 return。任何帮助表示赞赏。

扩展我的评论:

  1. grep 区分大小写。 free 说 "Total",你 grep "total"。所以不匹配! grep for "Total" 或使用 grep -i.
  2. 当我需要从一行中取出数字时,我更喜欢 awk 而不是 cut。您不知道数字的长度,但您知道它将是 Total: 之后的第一个数字。所以:

free -m -t | grep "Total:" | awk '{print }'

  1. 对于您的 top 命令,如果您没有 init 进程(您应该有,但它可能不会显示在 top 中),只需 grep 其他东西以查看您的代码是否有效。我用了肉桂(运行 薄荷)。最上面的命令是:

top -n 5 | grep "cinnamon" | awk '{print }'

根据您的要求将 "cinnamon" 替换为 "init"。为什么 $1 在 awk 中?我的顶部将 PID 放在第一列。相应调整。

总的来说,当您有一个由某些字符分隔的字符串时,使用 cut 会很好。前任。 aaa;bbb;ccc,你会削减 -d';'。但是这里的数字可能有不同的长度,所以使用 cut 不是(恕我直言)最好的解决方案。

init 进程的 PID 为 1,没有理由这样做。

一般情况下要查找进程的 PID,我建议:

pidof <name>