2016-12-16 6 views
-1

Ich habe ein Skript „nicht genügend Argumente Format-String zu erfüllen“, um die Daten aus unserem Unix-Server zu packen, aber ich bin mit dem folgenden Fehler bekommen:awk: Fehler in Skript

awk: cmd. line:8: (FILENAME=- FNR=2) fatal: not enough arguments to satisfy format string 
    `|%-17s|%-16s|%-15s|' 
        ^ran out for this one 

Im Folgenden finden Sie die komplette Skript :

#!/bin/sh 
export TERM=xterm 
ipath=/usr/local/nextone/bin 
date=$(date +"%Y%m%d%H%M") 
ifile="$(date '+/var/EndpointUsage_%I-%M-%p_%d-%m-%Y.csv')" 
"$ipath"/cli iedge list | awk ' 
BEGIN { print "|-----------------|------------------|------------------|"; 
printf "|%-18s|%-17s|%-16s|\r\n","Registration ID", "Port", "Ongoing Calls" 
} 
/Registration ID/ { id = $3; next } 
/Port/ { port = $3 ; next } 
/Ongoing Calls/ {print "|-------------------|-----------------|------------- -----|"; 
printf "|%-18s|%-17s|%-16s|\r\n",id,port,$3 } 
END{ 
print "|------------------|------------------|------------------|"; 
}'>> "$ifile" 

Kann mir bitte jemand helfen, wie kann ich diesen Fehler beheben?

NACH ÄNDERUNGEN werden die Spalten korrekt angezeigt, aber die Spalte Port enthält keine Daten. Es sollte 0 haben oder wenn ein anderer Endpunkt 1 oder 2 Port-Nummer hat.

|-----------------|------------------|------------------| 
|Registration ID |Port    |Ongoing Calls | 
|-------------------|-----------------|------------------| 
|-------------------|-----------------|------------------ 
|CC_XXXXXX_01_0  |     |174    | 
|-------------------|-----------------|------------------| 
+3

Sie haben eine Frage gestellt, Sie haben [die Antwort] (http://stackoverflow.com/a/41192985/1745001). Jetzt, wo du dein nächstes Problem gefunden hast, hast du deine Frage so geändert, dass es in Bezug auf deine ursprüngliche Frage und die damit verbundene Antwort keinen Sinn mehr macht und nun um Hilfe bei diesem ganz anderen, neuen Problem bittet. Tu das nicht. Setzen Sie diese Frage zurück, wie es angefangen hat, markieren Sie die Antwort, die Sie erhalten haben, und geben Sie eine neue Frage ein, wenn Sie es tun müssen, aber versuchen Sie zuerst, es selbst zu lösen. –

+3

Ich stimme @EdMorton zu. Es ist eigentlich besser, eine andere Frage zu stellen, die mit diesem verlinkt ist, so dass zukünftige Leser von spezifischen Antworten auf spezifische Fragen profitieren können. Weitere nützliche Tipps finden Sie in der [Tour] (https://stackoverflow.com/tour). Außerdem sollten Sie in Ihrer neuen Frage die Eingabedatei, den Code, die ausgegebene Ausgabe und die erwartete Ausgabe anzeigen. Auf diese Weise erhalten Sie schneller qualitativ hochwertige Antworten. Vielen Dank! – cxw

Antwort

3

Der fehlbare printf ist:

printf "|%-18s|%-17s|%-16s|\r\n",id,$3 
             ^^^^ awk wants to see a third parameter here 

Sie haben drei %s Sequenzen im Format-String erwartet so awk,<something else> nach dem $3. Ich denke, es ist ein Fehler beim Kopieren und Einfügen. Da Sie nur zwei Spaltenüberschriften drucken, versuchen Sie, die %-16s| am Ende zu entfernen und zu sehen, ob das Ihnen die erwartete Ausgabe liefert.

Bearbeiten Ohne Ihre Eingabedatei zu sehen, weiß ich nicht sicher. Versuchen Sie dies, obwohl -

/Registration ID/ { id = $3; next } 
/Port/ { port = $3 ; next } 
/Ongoing Calls/ {print "|-------------------|-----------------|------------------|"; 
printf "|%-18s|%-17s|%-16s|\r\n",id,port,$3 } 

I {port=$3;next} hinzugefügt, um die Portnummer zu speichern, und dann, wenn Sie sie ausdrucken, änderte es id,$3 zu id,port,$3 die gespeicherte id zu drucken, gespeichert port und laufenden Anrufen Wert ($3) in Ordnung.

+0

@EdMorton Hallo, es tut mir leid ... ich bin ziemlich neu in diesem, ich habe diese Sorge nicht bekommen, ich versuche nur, es zu lernen und würde gerne wissen, wo ist mein Fehler in oben Skript. –

+0

@cxw Vielen Dank für Ihre Antwort, ich glaube, ich habe die dritte Zeile verpasst, wenn ich eingefügt habe, eigentlich möchte ich 3 Zeile, ist für Registrierungs-ID, Port und laufende Anrufe, ich aktualisierte das Skript auch. –

+0

@EdMorton Hallo Morton, vielen Dank für deine Hilfe, es tut mir leid, dass ich die Antwort cxw nicht erwähnt habe, kannst du bitte das Skript bearbeiten, das ich erwähnt habe, damit ich weiß, wo der Fehler ist und was du geändert hast? Das wird sehr große Gunst von Ihnen sein ?, BTW ja, es war Spalte ... Vielen Dank noch einmal –