2016-06-30 5 views
0

Ich benutze ein 'awk', um die CPU im Leerlauf (vmstat), und es funktioniert gut unter Linux. Seltsam, unten Befehl zeigt nichts auf AIX.Wie bekomme ich CPU-Leerlauf auf AIX (awk)

vmstat 1 1 | awk '{for(i=NF;i>0;i--) if($i=="id") {x=i;break} } END{print $x}' 

Ich kann oben für das Textergebnis von AIX auf Linux das richtige Ergebnis mit dem Befehl sehen, aber ich kann nicht auf AIX.

# Vmstat 
# AIX 
System Configuration: lcpu=8 mem=16384MB 
kthr  memory    page    faults   cpu 
----- ----------- ------------------------ ------------ ----------- 
r b avm fre re pi po fr sr cy in sy cs us sy id wa 
1 1 1566673 633894 0 0 0 0 1 0 895 7958 348 1 1 98 1 

# Linux  
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- 
r b swpd free buff cache si so bi bo in cs us sy id wa st 
0 0 210564 109296 103864 580288 1 1 145 4152 12 8 7 7 86 0 0  

Ausgabe

86 (on Lnux) 

Nothing (on AIX)<----- means just blank line. 

Können Sie sehen, was mir fehlt?

UPDATE

vmstat 1 1 Mit obigem Befehl können wir seit dem Neustart die durchschnittliche CPU nur bekommen, sollten so betrachten unten Befehle stattdessen zu verwenden.

vmstat 1 2 | tail -3 | sed '2d' 
+0

Bitte addiere Ausgabe von "vmstat 1 1" von Linux und AIX. –

+0

Danke für Ihre Hilfe soFan. – Sigularity

Antwort

1

ich vielleicht die erste Zeile dachte ist ein Thema, die id Spalte zu finden. Wie wäre es (für Linux):

vmstat 1 1 | awk ' 
NR == 2 { for(i=NF;i>0;i--) if($i=="id") {x=i;break} } 
NR == 3 { print $x }' 

Und für AIX:

vmstat 1 1 | awk ' 
NR == 4 { for(i=NF;i>0;i--) if($i=="id") {x=i;break} } 
NR == 5 { print $x }' 

NR ist die Zeilennummer, also habe ich die aus Ihrer Ausgabe angenommen.

bearbeiten: nach einiger erweiterter Arbeit zu Hause, kam ich durch eine awk Lösung Spuren von Linien in einem Array zu halten:

vmstat 1 1 | awk '{ line[NR] = $0 } 
END { 
    split(line[NR-1],params); 
    for(i in params) if(params[i] == "id") { break; } 
    split(line[NR],values); 
    print values[i] 
}' 

bearbeiten: Über den Schwanz Lösung, müssen Sie NR verwenden entsprechend:

vmstat 1 1 | tail -2 | awk ' 
NR == 1 { for(i=NF;i>0;i--) if($i=="id") {x=i;break} } 
NR == 2 { print $x }' 
+0

Danke. Es klappt. Btw, ich denke, ich sollte nur die letzten 2 Zeilen überprüfen, falls es verschiedene Ausgaben von vmstat für die Plattform gibt. Wie kann ich die letzten 2 Zeilen wie NR == 4 oder so spezifizieren? – Sigularity

+0

Einfachste Methode ist die Verwendung von 'iostat <> | Schwanz -2'. – Aif

+0

Ich werde versuchen mit 'vmstat 1 1 | Schwanz -2 '. Vielen Dank! – Sigularity