从dstat获取每个核心的CPU空闲百分比,以获取可变数量的核心

时间:2017-01-17 21:37:47

标签: awk grep cpu-usage

我有超过100台服务器,全部使用不同的CPU,可能有2到16个核心。

我可以通过以下命令获取每个核心的空闲CPU(dstat安装在所有服务器上):

dstat -c -C 0,1,2,3,4,5,6,7  --noheaders --nocolor --noupdate 3 1

我知道执行时的内核数量,因此进入-C的内核数量会有所不同。输出如下:

-------cpu0-usage------ -------cpu1-usage------ -------cpu2-usage------ -------cpu3-usage------ -------cpu4-usage------ -------cpu5-usage------ -------cpu6-usage------ -------cpu7-usage------
usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq:usr sys idl wai hiq siq
  5   3  90   0   0   2:  4   3  91   0   0   2:  4   3  91   0   0   2:  6   4  88   0   0   2:  2   1  96   0   0   1:  2   1  96   0   0   1:  2   1  96   0   0   1:  7   5  75   0   0  13
  3   1  95   0   0   1:  2   1  96   0   0   0:  5   2  93   0   0   1:  2   1  96   0   0   1:  1   0  99   0   0   0:  1   1  97   0   0   1:  1   0  98   0   0   0: 23  16  16   0   0  45

我需要"提取"每个核心的idl值,从最后一行开始,并以逗号分隔格式吐出。所以从上面的数据集中,我想得到以下输出:

95,96,93,96,99,97,98,16

我的grep / awk-foo非常差,有人可以协助吗?

2 个答案:

答案 0 :(得分:1)

使用tail -n1获取输出的最后一行。听起来你需要从第3列开始每隔6列? awk中的for循环可以做到这一点。然后使用tr将换行符更改为逗号:

yourcommand | tail -n1 | awk '{for (i=3; i<=NF; i+=6) print $i }' | tr '\n' ','

答案 1 :(得分:1)

$ awk '{out=""; for (i=3;i<=NF;i+=6) out = out (i>3?",":"") $i} END{print out}' file
95,96,93,96,99,97,98,16