So verwenden Sie awk zum Verarbeiten der iostat-Ausgabe mit Flags

So verwenden Sie awk zum Verarbeiten der iostat-Ausgabe mit Flags

hier sind meine Variablen:

HEADER='Device     bps     tps     bread     bwrtn'
HEADERIZE="BEGIN {print \"$HEADER\"}"
PRINTF='{printf "%-10s  %11s  %11s  %12s  %12s  %13s  %13s  %13s\n", device, bps, tps, bread, bwrtn}'
CMD='iostat -DlR 1 2'
FILTER='/^cd/ {next} /^Disks:/ {reportOrd++; next} (reportOrd<2) {next}'
FORMAT='{device=$1; bps="?"; tps="?"; bread=$5; bwrtn=$6}'

$CMD | awk "$HEADERIZE $FILTER $FORMAT $PRINTF"  header="$HEADER"

Ich möchte, dass die Ausgabe folgendermaßen aussieht:

Device     bps     tps     bread     bwrtn
hdisk0     0.0     0.0     0.0       0.0         
hdisk1     0.0     0.0     0.0       0.0
hdisk2     0.0     0.0     0.0       0.0
hdisk3     0.0     0.0     0.0       0.0

natürlich hätte ich gerne mehr Performance-Header, aber ich versuche es einfach zu halten.

Das Problem tritt auf, wenn ich $CMD | awk "$HEADERIZE $FILTER $FORMAT $PRINTF" header="$HEADER"Folgendes ausführe: . Das Ergebnis ist wie folgt:

Device          bps tps bread bwrtn
---------------            ?            ?  --------------------------------------              
%tm                   ?            ?         bwrtn           rps
act                   ?            ?          outs          serv
hdisk1                ?            ?           0.0           0.0
hdisk0                ?            ?           0.0           0.0

Ich glaube, dass die Variable „FILTER“ falsch ist, kenne aber die richtige Syntax nicht.

Dies ist die Eingabe:iostat -DlR 1 2

Ausgabe:

root@myserver #iostat -DlR 1 2

System configuration: lcpu=20 drives=2 paths=16 vdisks=0

Disks:                      xfers                                read                                write                                  queue                  
--------------- -------------------------------- ------------------------------------ ------------------------------------ -------------------------------------- 
                  %tm    bps   tps  bread  bwrtn   rps    avg    min    max time fail   wps    avg    min    max time fail    avg    min    max   avg   avg  serv
                  act                                    serv   serv   serv outs              serv   serv   serv outs        time   time   time  wqsz  sqsz qfull
hdisk1            0.0   0.0    0.0   0.0    0.0    0.0   0.0    0.0    0.0     0    0   0.0   0.0    0.0    0.0     0    0   0.0    0.0    0.0    0.0   0.0   0.0
hdisk0            0.0   0.0    0.0   0.0    0.0    0.0   0.0    0.0    0.0     0    0   0.0   0.0    0.0    0.0     0    0   0.0    0.0    0.0    0.0   0.0   0.0

Disks:                      xfers                                read                                write                                  queue                  
--------------- -------------------------------- ------------------------------------ ------------------------------------ -------------------------------------- 
                  %tm    bps   tps  bread  bwrtn   rps    avg    min    max time fail   wps    avg    min    max time fail    avg    min    max   avg   avg  serv
                  act                                    serv   serv   serv outs              serv   serv   serv outs        time   time   time  wqsz  sqsz qfull
hdisk1            0.0   0.0    0.0   0.0    0.0    0.0   0.0    0.0    0.0     0    0   0.0   0.0    0.0    0.0     0    0   0.0    0.0    0.0    0.0   0.0   0.0
hdisk0            0.0  77.8K  19.0   0.0   77.8K   0.0   0.0    0.0    0.0     0    0  19.0   0.3    0.2    0.5     0    0   0.0    0.0    0.0    0.0   0.0   0.0





Desired output:


Device     bps     tps     bread     bwrtn
hdisk0     0.0     0.0     0.0       0.0         
hdisk1     0.0     0.0     0.0       0.0
hdisk2     0.0     0.0     0.0       0.0
hdisk3     0.0     0.0     0.0       0.0

Antwort1

Lösung:

iostat -d 1 2 | awk 'BEGIN{print "Device\tbps\ttps\tbread\tbwrtn"}/^hdisk/{print $1"\t"$3"\t"$4"\t"$5"\t"$6}'

Ausgabe:

Device  bps     tps     bread   bwrtn
hdisk1  0.0     0.0     0.0     0.0
hdisk0  0.0     0.0     0.0     0.0
hdisk1  0.0     0.0     0.0     0.0
hdisk0  77.8K   19.0    0.0     77.8K

Kommentare:

Ich fürchte, Sie machen die Sache zu kompliziert. Die angebotene Lösung ist eine Vermutung, die auf Ihrem Eingabebeispiel und der gewünschten Ausgabe basiert, die einige Inkonsistenzen aufweisen. Bitte erklären Sie, woher die Daten hdisk2kommen hdisk3, da sie in der Eingabe nicht vorhanden sind. Bitte erklären Sie auch den Grund für den Aufbau einer so komplizierten Lösung, die den Code in mehrere Umgebungsvariablen aufteilt.

verwandte Informationen