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

问题描述:

我有100多台服务器,全部使用不同的CPU,可能有2至16个内核。从dstat获取每个内核的CPU空闲百分比,以获取可变内核数量

我可以通过下面的命令得到每个核心空闲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是相当的差,可以有人协助?

$ 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 

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

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

谢谢,几乎工程。我如何在第三栏开始? – Yegor

+0

在awk命令中应该是'i = 3'。修复了答案。 –

+0

这将在行尾添加尾随逗号,并生成没有终止换行符的输出,因此结果不是POSIX文本“文件”,因此YMMV将知道后续任何命令都可以使用它。 –