2016-08-04 8 views
0

ich ein awk Scrip haben, die Funktionen wie unten umfasst:awk-Skript mit Funktionen auf entfernten Servern

for file in logfile.log; 
do 
    echo "File Name- "$file; 
    grep -v "Some Text" $file | awk -F [:\ ] '{sub(/T/, " "); if($8~500) CNT[$1":"$2]++} END {for (c in CNT) print c, "--", CNT[c]}' | sort; 
    echo "==============Done with $file=================="; 
done 

Aber ich möchte auf viele entfernen Server dieses Skript auszuführen, so dass ich melden Sie sich einfach in unseren Einsatz (Welche grundsätzlich haben Zugriff auf alle Server, die ich ausführen möchten) und ich bin immer Fehler viele Kompilation, ich bin mit dem folgenden Code:

for server in 01 02 03 04; do 
ssh [email protected]$server ' 
hostname -f; 
cd /logs/dir/path; 
for file in log-file-name.log; 
do 
    echo "File Name- "$file; 
    grep -v "Some Text" $file | awk -F [:\ ] '{sub(/T/, " "); if($8~500) CNT[$1":"$2]++} END {for (c in CNT) print c, "--", CNT[c]}' | sort; 
    echo "==============Done with $file=================="; 
done 
' 2>&1 | grep -v 'THIS SYSTEM IS RESTRICTED'; done 

Kann jemand bitte mir auf diesem helfen? Mein Problem ist, obwohl dieses Skript dosent irgendwelche Kompilierungsfehler hat, ich bekomme viele Kompilierungsfehler.

Vielen Dank im Voraus!

+0

Das von Ihnen gepostete awk-Skript enthält keine Funktionen. Was denkst du 'für Datei in logfile.log;' tut? Da in Ihren Skripten nichts kompiliert wird, erhalten Sie keine Kompilierungsfehler, vielleicht meinen Sie Syntaxfehler oder Laufzeitfehler? Wenn Sie Fehler erhalten, senden Sie bitte die Fehlermeldungen. –

+0

Hallo Morton, für Datei in logfiles.log - das wird mehr als eine Datei loopen, nur zum Testen erwähnte ich eine Datei, aber ich muss mehr als eine Datei loopen, also nahm ich diese für die Schleife. Die Fehlermeldung, die ich bekomme, ist ---> webserveriw01.ceso.com bash: -c: Zeile 6: Syntaxfehler in der Nähe eines unerwarteten Tokens '(' bash: -c: Zeile 6:' grep -v "Ein Text" $ file | awk -F [: \] \ {sub (/ T /, ""); if ($ 8 ~ 500) CNT [$ 1 ":" $ 2] ++} END {für (c in CNT) drucke c, "-", CNT [c]} \ | sort; ' – Vasu

+0

awk ist perfekt in der Lage, mehrere Dateien zu öffnen ('awk 'Skript' file1 file2 ...'), Sie brauchen keine Schleife. [Edit] –

Antwort

1

In bash werden in einem einfachen Anführungszeichen (') alle folgenden Zeichen mit Ausnahme anderer einfacher Anführungszeichen entfernt. Aus diesem Grund werden Dinge wie {sub... im OP von Ihrem lokalen Skript interpretiert.

Um das Skript auf diese Weise an den Remote-bash (der von ssh geöffnet) passieren, müssen Sie:

  • das gesamte Skript beilegen in einfachen Anführungszeichen.

  • Ersetzen Sie jedes einzelne Zitat ' in Ihrem Skript (nicht die äußeren!) Von '\''. Wie das funktioniert: Die erste ' beendet das aktuelle Zitat; Die \' enthält ein einzelnes Apostroph in Anführungszeichen; das letzte ' öffnet das Zitat wieder.

Beispielscript:

foo=bar 
echo 'foo=$foo' 
echo "foo=$foo" 

Erwartete Ausgabe:

foo=$foo 
foo=bar 

Beispiel Aufruf "von Hand", das heißt, das ist etwas, das Sie ein Terminal eingeben würde:

ssh server ' 
foo=bar 
echo '\''foo=$foo'\'' 
echo "foo=$foo" 
' 

Allerdings gibt es einen Weg zu einem erlöschen all dieses Angabe Geschäft: Sie konnte das ursprüngliche Skript speichern (bei normalen einfachen Anführungszeichen) in einer Datei myscript und läufst stattdessen:

ssh server "$(cat myscript)" 

Auf diese Weise wird die lokalen bash nicht mehr durch die einfachen Anführungszeichen zu verwechseln erscheinen in , weil der gesamte Inhalt zitiert wird.

+0

Hallo David, Danke Sie so viel für Ihre Zeit und Hilfe, aber immer noch bekomme ich folgende Ausnahme: webserveriw01.ceso.com Bash: -c: Zeile 6: Syntaxfehler in der Nähe von unerwarteten Token '(' Bash: -c: Zeile 6:' Grep -v "Ein Text" $ file | awk -F [: \] \ {sub (/ T /, ""); if ($ 8 ~ 500) CNT [$ 1 ":" $ 2] ++} END {für (c in CNT) drucken c, "-", CNT [c]} \ | sort; ' – Vasu

+0

Es tut mir leid, sehr zu fragen grundlegende Fragen !!! – Vasu

+0

Vielen Dank David, Es funktioniert perfekt für mich, du hast meinen Tag gemacht :) – Vasu

Verwandte Themen