【问题标题】:How to hide "idle" (both CPU and RAM) processes in top?如何在顶部隐藏“空闲”(CPU和RAM)进程?
【发布时间】:2018-11-20 18:29:39
【问题描述】:

我有一个基于 top 的 linux 命令,它输出我当前的任务快照(我已经从各种 SE 主题中组装了它,所以它可能不是最佳的,但它对我有用):

top -bn 1 -i | grep "^ " | awk '{ printf("%s%s%s\n","
{CPU:"$9",","MEM:"$10",","CMD:"$12"}"); }' | tail -n +2 | gawk '{ 
print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'

输出是这样的:

[2018-11-20 18:09:11] {CPU:0.0,MEM:0.2,CMD:uwsgi}
[2018-11-20 18:09:11] {CPU:0.0,MEM:0.0,CMD:uwsgi}
[2018-11-20 18:09:11] {CPU:0.0,MEM:0.0,CMD:nginx}
[2018-11-20 18:09:11] {CPU:0.0,MEM:0.0,CMD:nginx}
[2018-11-20 18:09:11] {CPU:0.0,MEM:0.0,CMD:nginx}

实际上,我每次执行命令都会得到大约 300 行代码。 我想删除具有“CPU:0.0,MEM:0.0”的行。

我已经尝试过:top -i但这会删除所有“空闲”任务,这意味着“CPU:0.0” - 但是,这样,我会丢失所有任务,例如:CPU:0.0,MEM:0.2(其中我想保留)

也许在命令的 awk 部分中以某种方式添加 if-then-else?我试过破解它,但它不起作用。

【问题讨论】:

  • 能否请您发布您的top 命令本身的输出,我们也可以在单个awksed 本身中执行此操作。并且可以节省许多要创建的子流程。
  • 在语句前加上条件$9+$10,会过滤掉两者都为零的记录。例如awk '$9+$10{printf ...

标签: linux awk grep top-command


【解决方案1】:

grep 会做:

... | grep -v "CPU:0.0,MEM:0.0"

来自手册页:

-v, --invert-match
    Invert the sense of matching, to select non-matching lines.

【讨论】:

  • 我们生活在这样一个世界里,2 天就足以编写一些代码并测试它是否正常工作;)无论如何,感谢您的帮助,这是一个简单的修复,让我相信它会工作正常!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多