【问题标题】:field separation in top command using awk使用 awk 在 top 命令中进行字段分隔
【发布时间】:2017-02-17 13:24:16
【问题描述】:

我需要从top 的输出中获取特定字段。我该怎么做?

我有

top -b -n 10 -d 10  

top - 05:16:04 up 24 days, 49 min,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 494 total,   1 running, 493 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  65971500k total,  4028640k used, 61942860k free,   420512k buffers
Swap: 10485756k total,        0k used, 10485756k free,  1134108k cached

我需要来自top 行的time,以及来自Mem 行的used 值;在此示例中,即为 05:16:044028640k

以下 awk 脚本为我提供时间字段:

{
    for (i=1;i<NF;i++) {
        if($i~/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/){
           print $i
        }
    }
}

如何提取使用的内存?

【问题讨论】:

  • awk'{for(i=1;i
  • 你的预期输出是什么?
  • 嗨 Jose,我需要第一行的 05:16:04 和第三行使用的内存 4028640k 内存:对于所有实例
  • 为此使用freeuptime
  • 也可以用一行grep命令实现(如果你有兴趣)

标签: linux shell awk


【解决方案1】:

使用 awk 读取“字段”的能力,默认情况下由空格分隔,并且信息的固定位置(作为字段参考)top

awk '$1 ~ /^top$/ { Time = $3 }
     $1 ~ /^Mem:$/ { Mem = $4 #it include the trailing "k"}
     END { print Time OFS Mem }
    '

我使用 END 部分进行打印,并使用变量来提醒信息,以便稍后显示如何捕获和使用它,但在您的这种情况下,直接 printf 就足够了。

awk '/^top/{printf("%s",$3)}/^Mem:/{print OFS $4}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多