2017-11-10 2 views
-1

Ich versuche, Befehl 3 auszuführen und die Ausgabe als eine Variable zu erhalten, die eine prozentuale Berechnung benötigt und die gleiche wie das Beispiel anzeigt. kann dies als Skript ausgeführt werden.awk num Funktionsfehler

Ich kann die Daten auf dem Host nicht speichern, wo ich den Befehl ausführe, Mein Skript wird auf dem lokalen System sein, das auf dem entfernten Host ausgeführt wird und die Daten zu meinem lokalen Rechner zurückbringt. Gibt es einen möglichen Ansatz, um diese Aufgabe zu erfüllen?

Erste Ausgabe des Befehls

$ isi status -q | grep -e "^Size" -e "^Used" -e "^Avail" 
Size:573T 
Used:448.0T 
Avail:74T 

zweiten Befehlsausgabe

$ isi_classic snapshot usage | tail -n 1 | awk '{printf "\t\t\tSnapshot USED %=%.1f%%\n", $4}' 
    Snapshot USED =0.6% 
$ isi_classic snapshot usage | tail -n -1 | awk '{ print "\t\t\tSnapshot USED:" $1}' 
    Snapshot USED=3.2T 

Beispielskript awk-Skript funktioniert nicht. nach entfernten Raum

# isi status -q | grep -e "^Size" -e "^Used" -e "^Avail" | awk 'function print (num) 
pipe pipe quote> /Size:/ {TotalSize=$NF~} 
pipe pipe quote> /Used:/ {TotalUsed=$NF} 
pipe pipe quote> /Avail:/ {TotalAvail=$NF} } 
pipe pipe quote> END { 
pipe pipe quote>  used=TotalUsed/Total_Size*100 
pipe pipe quote>  system("isi_classic snapshot usage | tail -n -1 | awk '{ print "Snapshot_used=" $1}'") 
pipe pipe quote>  system("isi_classic snapshot usage | tail -n 1 | awk '{printf "Snapshot_per :%.1f\n", $4}'") 
pipe pipe quote>  Usedw/o=Total Used-Snapshot USED/Total Size 
pipe pipe quote>  print hostname ": " "\t","Total Size:" Total_Size 
pipe pipe quote>  printf "\t\t\tTotalUsed:%.1f\n", TotalUsed, "TB" 
pipe pipe quote>  printf "\t\t\tTotalAvail:%.1f\n", TotalAvail, "TB" 
pipe pipe quote>  printf "\t\t\tTotalUsed %:%.1f\n", used, "TB" 
pipe pipe quote>  printf "\t\t\tSnapshot Used :%.1f\n", Snapshot_used, "TB" 
pipe pipe quote>  printf "\t\t\tSnapshot Used %:%.1f\n", Snapshot_per, "TB" 
pipe pipe quote>  printf "\t\t\tUsed w/o:%.1f\n", Usedw/o, TB)' 
awk: syntax error at source line 1 
context is 
     function >>> print <<< (num) 
     missing } 
     missing) 
awk: bailing out at source line 7 

Probe Anforderung

Total Size  : 573 TB 
Total Used  : 448.0 TB 
Total Available : 74 TB 
Total Used % : 86.1 % # Total Used(%) = Total Used/Total Size *100 = 86.1(%) 
Snapshot Used : 3.2 TB 
Snapshot Used % : 0.6 % 
Used w/o  : 85.5 % # {(Total used)-(Snapshot used)}/(Total size) = 85.49% 
+1

Wenn Ihre Frage zu normalisieren ist über Awk, loswerden all die fremden Sachen. Speichere die Ergebnisse von 'isi status -q | grep -e "^ Größe" -e "Verwendet" -e "Avail" in einer Datei. Machen Sie diese Datei so klein wie möglich (eine Zeile?), Wo es immer noch das Problem mit Ihrem awk-Befehl zeigt. Machen Sie das awk-Skript so klein wie möglich, wo es immer noch den Fehler gibt. Es ist eine gute Chance, bis Sie das Problem sehen, aber wenn nicht die kleine Eingabe, das kleine Skript, das erwartete Ergebnis und das tatsächliche Ergebnis. – jas

+0

Ich werde dies auf mehreren Hosts ausführen und jetzt können wir die Ausgabe in einer Datei speichern (nicht erlaubt). Auf meinem lokalen System wird dieses Skript vorhanden sein und ich werde dieses Skript auf dem Host ausführen und das Ergebnis zurück in eine Datei bringen. – Shanker

+0

@jas sagt dir nicht, dass das die Lösung ist, sie sagt dir, wie man ein [mcve] erstellt, um deine Frage zu stellen. Du fragst nach Hilfe, um die Ausgabe von 'isi_whatever' zu parsen - wir haben diesen Befehl nicht, also woher wissen wir, was er ausgegeben hat/die Eingabe von awk sieht aus, wenn du uns nicht zeigst? Was ist "Beispielanforderung" - die Beispieleingabe oder die erwartete Ausgabe? Was auch immer es ist, der andere fehlt. Siehe [fragen], wenn das nicht klar ist. –

Antwort

0

Ich glaube, es gibt einige Syntax Probleme mit dem awk-Code sind. Hier ist ein Anfang, wenn Sie sich mit Schale bestehen + awk

Use ':' als IFS ('-F:')

Speicher Eingabe von stdin (Hinter '-') in einem Array von Tastenbeschriftung indiziert z.B Größe

$ NF + 0 awk haben loszuwerden lästigen Hinter ‚T‘ ** bewusst sein, wenn die Einheiten ändern (dh bis G) Sie, dass Informationen benötigen

[stdin] | awk -F\: '{a[$1]=($NF+0)} END{ ... grind stats here ...}' -