从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' ','
谢谢,几乎工程。我如何在第三栏开始? – Yegor
在awk命令中应该是'i = 3'。修复了答案。 –
这将在行尾添加尾随逗号,并生成没有终止换行符的输出,因此结果不是POSIX文本“文件”,因此YMMV将知道后续任何命令都可以使用它。 –