2017-06-15 3 views
0

Wir holen einen Speicherbericht, in dem wir eine isi-storagepool --list -v einschließlich einer awk-Funktion, die einige Berechnungen ausführt und druckt die Daten am Ende.Ausführung multipal Befehl in awk Funktion

Aktuelle Arbeits Befehl

isi storagepool list -v |awk 'function num2gb(n) { if (n ~ /T$/) return n/1; return n/1024; } 
     /Requested Protection:/ { parity=substr($NF,length($NF)-1,1) } 
     /Nodes:/ { nodes=$NF } 
     /HDD Total/ { hdd_total=$NF } 
     /HDD Used/ { hdd_used=num2gb($NF) } 
     END { 
       multiplier=nodes-parity 
       total=hdd_total/nodes*multiplier 
       used=hdd_used/nodes 
       eu=used*multiplier*0.8 
       et=total*0.8 
       used1=eu/et*100 
       print "parity =" parity 
       print "NodeNumber =" nodes 
       print "Total = " total " TB" 
       print "Effective Total volume = " total*0.8 " TB" 
       print "USED =" used1 " %" 
       print "Effective used=" used*multiplier*0.8 " TB" 
       print "Available volume=" (hdd_total-hdd_used)/nodes*multiplier*0.8 " TB" }' 

Beispielausgabe des aktuellen Arbeits Befehl

parity =1 
NodeNumber =3 
Total = 37.3013 TB 
Effective Total volume = 29.8411 TB 
USED =333975% 
Effective used=534360 TB 
Available volume=-534330 TB 

Jetzt wollen wir einige weitere Informationen zu dem obigen Beispielausgabe hinzuzufügen, die wir aus dem unten Befehl erhalten wird.

# isi_classic snapshot usage | tail -n 1 
                358G  n/a (R) 0.63% (T) 

Damit die Anforderung Ausgabe sollte wie sein unter

parity =1 
NodeNumber =3 
Total = 37.3013 TB 
Effective Total volume = 29.8411 TB 
USED =333975% 
Effective used=534360 TB 
Available volume=-534330 TB 
Snapshot USED = 358G   # added output from the new command # isi_classic snapshot usage 
Snapshot USED % = 0.63%  # added output from the new command # isi_classic snapshot usage 

Antwort

1

Die naheliegendste Möglichkeit, die Ausgabe mehrerer Befehle zu kombinieren, ist ein Befehl Gruppe, wie diese verwenden:

{ date; date; } | awk 1 

Eine möglicherweise elegantere Lösung wäre Prozesssubstitution, wie folgt zu verwenden:

awk 1 <(date) <(date) 

Letzteres würde zum Beispiel die Verwendung des alten NR==FNR Tricks erlauben.