2017-01-17 1 views
0

나는 100 개가 넘는 서버를 가지고 있으며, 모두 2에서 16 코어를 가진 다른 CPU를 사용하고 있습니다.다양한 코어의 dstat에서 각 코어에 대한 CPU 유휴 비율 가져 오기

I 수 (dstat는 모든 서버에 설치되어있는) 다음 명령을 통해 각 코어의 유휴 CPU를 얻을 :

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

내 그렙/AWK - 푸 수있는 매우 가난한 누군가 도움이 되니?

답변

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 
1

tail -n1을 사용하면 출력의 마지막 줄을 가져올 수 있습니다. 3 열에서 시작하여 매 6 열이 필요하다고 생각하십니까? awk의 for 루프는 그렇게 할 수 있습니다. 당신이 원하는대로 그리고 쉼표로 줄 바꿈을 변경 tr를 사용

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

감사를 거의 작동합니다. 3 열에서 어떻게 시작합니까? – Yegor

+0

awk 명령에서'i = 3'이되어야합니다. 답변에서 수정되었습니다. –

+0

줄 끝 부분에 쉼표를 추가하고 결과가 POSIX 텍스트 "file"이 아니므로 결과를 출력하므로 YMMV가 후속 명령에서 수행 할 수있는 작업을 알려줍니다. –

관련 문제