使用awk在top命令中进行字段分离

时间:2017-02-17 13:24:16

标签: linux shell awk

我需要从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行的时间,以及来自Mem行的使用值;在此示例中,该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
        }
    }
}

如何提取使用的内存?

1 个答案:

答案 0 :(得分:0)

使用awk读取“字段”的功能,默认情况下用空格分隔,以及 top 的信息的固定位置(作为字段引用)

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

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

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