PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Awk Lofile suchen



huckerby
19.06.08, 09:10
Hallo ich habe nochmals eine Frage zu AWK Programmierung.

Szenario:
Ich habe ein .AWK Skript : Skript 1 und ein Mehrere Logfiles in untergeordnete Verzeichnisse welche : Logfiles.log heissen.

Wie ich diese Logfiles auswerte weiss ich bereits aber mir fehlt etwas ganz banales:

Wie kann ich alle Logfiles suchen welche "logfiles.log" heissen, und diese danach demensprechend mit "Skript1" bearbeiten?

Mit grep logfiles *.log und dann eine IF Abfrage?

Veierabend
19.06.08, 09:33
Ne for-Schleife wär vllt besser geeignet

for i in $(ls *.log | grep logfiles);
do skript $i;
done;
so z.B., wenn du den Datainamen der Logs als Parameter an das Skript übergibst.
Oder halt skript durch den Befehl ersetzen, den du auf die Logs loslassen willst.

CharlyP
19.06.08, 09:43
... oder wie wäre es mit einem simplen "find"


find <Verzeichnis> -iname logfile.log -exec <Skriptname> '{}' \;

huckerby
19.06.08, 09:59
... oder wie wäre es mit einem simplen "find"


find <Verzeichnis> -iname logfile.log -exec <Skriptname> '{}' \;

Dies müsste ich aber auf der Kommandozeile oder in einem Batchfile ausführen oder?

CharlyP
19.06.08, 10:09
Dies müsste ich aber auf der Kommandozeile oder in einem Batchfile ausführen oder?

Korrekt, "find" sucht alle Verzeichnisse unterhalb von <Verzeichnisname> nach Deinem Suchmuster "logfile.log" (egal ob in Groß- oder Kleinschrift, wegen -iname, steht für suche nach Dateiname und ignore-case) und führt den Befehl hinter -exec für jede einzelne gefundene Datei aus.

huckerby
19.06.08, 10:25
Korrekt, "find" sucht alle Verzeichnisse unterhalb von <Verzeichnisname> nach Deinem Suchmuster "logfile.log" (egal ob in Groß- oder Kleinschrift, wegen -iname, steht für suche nach Dateiname und ignore-case) und führt den Befehl hinter -exec für jede einzelne gefundene Datei aus.


okee.. vielen vielen dank=).
Wenn ich über Batch oder wie auch immer das awk ausführe, muss ich das Ergebniss in ein log File schreiben.

Mein AWK Script:
Nun, mein AWK Skript wertet mir ein Log File aus. Und zwar wird jeweils der Wert auf 4ter Position mit $4 ausgegeben und mit der nächsten Zeile Addiert.

Also:
Pos.4 (BSP:450) von Zeile1 + Pos.4 (BSP 300) von Zeile2 + Pos.4 (BSP 50) von Zeile 3

Das Ergebnis wird danach auf der Kommandozeile ausgegeben. (Hier: 800).

Das Problem mit einem Batch File:

Ich kann die Ausgabe des AWK Skripts nicht über ein Windows batch file einsehen.
Ich müsst im AWK Script die Ausgabe in ein Logfile schreiben.

Meine bisherige Ausgabe (Count ist die Summe von den verschiedenen $4:

END {
# printf ("total=%s\n", count);
print count ;
}
Ausgabe auf Konsole : 800

Müsste die Ausgabe um "count" in ein neues logfile zu schreiben so aussehen?
END {
# printf ("total=%s\n", count);
print count > count.log ;
}

Er mosert mir immer der Punkt bei count ->.<- log ein Syntax fehler ist:(

Wie kann man dies machen?

danke für jede Hilfe=)

huckerby
19.06.08, 10:42
Einfach gesagt habe ich 2 Fragen=):

1. Wie kann ich mehrere Lofiles nach Namen suchen und einzelne Werte davon ausgeben?
2. Wie kann ich eine Ausgabe in ein neues Log File schreiben?

CharlyP
19.06.08, 10:50
Ich kann die Ausgabe des AWK Skripts nicht über ein Windows batch file einsehen.


Sorry huckerby - mit Windows kenn ich mich nicht echt aus - da sollte (sofern Du nicht cygwin o.ä. installiert hast) auch der von mir vorgeschlagene find nicht funktionieren. (Frage wäre für mich auch, wieso Du den Thread unter "Linux als Server" gepostet hast, wenn Du mit Windows arbeitest...? :confused:

huckerby
19.06.08, 12:39
Sorry huckerby - mit Windows kenn ich mich nicht echt aus - da sollte (sofern Du nicht cygwin o.ä. installiert hast) auch der von mir vorgeschlagene find nicht funktionieren. (Frage wäre für mich auch, wieso Du den Thread unter "Linux als Server" gepostet hast, wenn Du mit Windows arbeitest...? :confused:


iiiiii Nein Nein ich arbeite sicher nicht mit Windows=D...

Ich meine es nur weil ich diesen Befehl:
find <Verzeichnis> -iname logfile.log -exec <Skriptname> '{}' \;
nicht im Awk ausführen kann....

hm