【问题标题】:removing header from top output从顶部输出中删除标题
【发布时间】:2017-09-15 07:49:01
【问题描述】:

我想将一些流程数据写入文件。为此,我选择使用top。我想监控几个进程并绘制它们超时性能的图表。

我使用的是 Mac OS 10.12。我认为没有一种简单的方法可以获取版本号。

现在我有命令: top -l 2 -n 5 -o mem | awk '{ printf("%-8s %-12s %-6s %-6s\n", $1, $2, $3, $8); }'

导致以下输出:

Processes:  390           total, 2015
2017/09/15  00:41:51
Load      Avg:          2.07,
CPU       usage:        5.11%  idle
SharedLibs:  169M          resident,
MemRegions:  117317        total, 1807M
PhysMem:  15G           used
VM:       2149G         vsize, swapins,
Networks:  packets:      24606796/21G
Disks:    2934900/103G  read,

PID       COMMAND       %CPU   MEM
0         kernel_task   0.0    1594M+
94178     idea          0.0    897M+
621       Google        Chrome 1
277       Google        Chrome 3865+
31724     Slack         Helper 223+
Processes:  390           total, 2021
2017/09/15  00:41:52
Load      Avg:          2.07,
CPU       usage:        4.47%  idle
SharedLibs:  169M          resident,
MemRegions:  117317        total, 1807M
PhysMem:  15G           used
VM:       2149G         vsize, swapins,
Networks:  packets:      24606796/21G
Disks:    2934900/103G  read,

PID       COMMAND       %CPU   MEM
0         kernel_task   3.9    1594M-
94178     idea          1.3    897M
621       Google        Chrome 1
277       Google        Chrome 3866+
31724     Slack         Helper 223

但是,我想删除标题并留下:

PID       COMMAND       %CPU   MEM
0         kernel_task   0.0    1594M+
94178     idea          0.0    897M+
621       Google        Chrome 1
277       Google        Chrome 3865+
31724     Slack         Helper 223+
0         kernel_task   3.9    1594M-
94178     idea          1.3    897M
621       Google        Chrome 1
277       Google        Chrome 3866+
31724     Slack         Helper 223

所有批次。我也可以省略PID COMMAND %CPU MEM 行。

我已经尝试通过管道进入sed,但是使用以下命令

top -l 2 -n 5 -o mem | sed '1,10d;n;' | awk '{ printf("%-8s %-12s %-6s %-6s\n", $1, $2, $3, $8); }'

只删除前 10 行,而不是 EACH 迭代的前 10 行。有人可以帮忙吗?

【问题讨论】:

  • 作为一个建议:因为 pid 出现不止一次,你可以只打印最后一次出现。

标签: bash logging awk sed process


【解决方案1】:

awk 解决方案。

一个班轮:

top -l 2 -n 5 -o mem | awk '/^PID/{if (p) next; p=1} p && NF>30 {printf("%-8s  %-12s  %-6s %-6s\n", $1, $2, $3, $8)}'

解释:

/^PID/{                    # line starts with PID
  if (p) next;             # if this is second time around, skip
  p=1                      # else: set var p to 1
} 
p && NF>30 {               # if p is set and number of fields > 30, print         
  printf("%-8s  %-12s  %-6s %-6s\n", $1, $2, $3, $8)
}

输出:

 $ top -l 2 -n 5 -o mem | awk '/^PID/{if (p) next; p=1} p && NF>30 {printf("%-8s  %-12s  %-6s %-6s\n", $1, $2, $3, $8) }'
 PID       COMMAND       %CPU   MEM
 0         kernel_task   0.0    1950M+
 320       idea          0.0    1007M+
 14246     thunderbird   0.0    541M+
 3142      Google        Chrome 1
 3136      Google        Chrome 2153+
 0         kernel_task   2.0    1950M-
 320       idea          3.1    1007M
 14246     thunderbird   0.0    541M
 3142      Google        Chrome 1
 3136      Google        Chrome 2153

现在你知道我的邮件客户端是什么了。

【讨论】:

    猜你喜欢
    • 2023-01-07
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多