
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 hdisk2
kommen 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.