AWK 2 Fragen

H

huckerby

Grünschnabel
Hallo ich habe nochmals eine Frage zu AWK Programmierung.

1. Wie kann ich mehrere Lofiles nach Namen suchen und ausführen?
2. Wie kann ich eine Ausgabe in ein neues Log File schreiben?



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?

FALLS ICH DIES MIT EINEM BATCH FILE LÖSEN SOLLTE, TAUCHT EIN NEUES PROBLEM AUF: DIE AUSGABE

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=)
 
Code:
for i in $(find $PATH_OF_LOGFILE_ROOT -name logfiles.log)
do
echo $i
done

Das sollte dir alle logfiles in den Unterverveichnissen geben?
 
Code:
for i in $(find $PATH_OF_LOGFILE_ROOT -name logfiles.log)
do
echo $i
done

Das sollte dir alle logfiles in den Unterverveichnissen geben?


Ah in Ordnung.

Tut mir leid ich bin ein ziemlicher AWK Noob:(

würde das schlussendlich so aussehen?:
Code:
BEGIN {
  FS = "\"";
  flag=0;
  count=0;

}
  {
  for i in $(ls *.log | grep all);
  do 
}
{

  if ($0 ~ time) {
    flag = 1;
  }
  if (flag == 1) {
    if ($0 ~ /size/) {
      count += $4;
    }
    if ($0 ~ /\/om-stage/) {
      flag = 0;
    }
  }
 $omfind.awk;
  done;
}

}
END {
  # printf ("total=%s\n", count);
  print count ;
}


Tut mir leid für die Umstände:(
 
Nein, so würde das nicht aussehen.
Du hast dort ein AWK script, welches vom AWK-Interpreter gelesen wird.
Hmm, hast gar keinen angegeben, also wirst du es mit awk ausführen.
Die Zeile, die ich und andere hier dir geschrieben haben, ist Shell-Script.

Ich würde an deiner Stelle ein script schreiben, das in etwa so aussehen könnte:

Code:
#!/bin/bash

for i in $(find $PATH_OF_LOGFILE_ROOT -name logfiles.log)
do
awk -f $dein_script $i
done


Oder mal anders gefragt, wie führst du das jetzt script aus?
Wie leutet die Befehlszeile?
 
Zuletzt bearbeitet:
Nein, so würde das nicht aussehen.
Du hast dort ein AWK script, welches vom AWK-Interpreter gelesen wird.
Hmm, hast gar keinen angegeben, also wirst du es mit awk ausführen.
Die Zeile, die ich und andere hier dir geschrieben haben, ist Shell-Script.

Ich würde an deiner Stelle ein script schreiben, das in etwa so aussehen könnte:

Code:
#!/bin/bash

for i in $(find $PATH_OF_LOGFILE_ROOT -name logfiles.log)
do
awk -f $dein_script $i
done


Oder mal anders gefragt, wie führst du das jetzt script aus?
Wie leutet die Befehlszeile?


Vielen Vielen Dank!!

Zum Batch Skript
----------------
Resulat:
Es wird ausgeführt, ich sehe aber die Ausgabe von meinem awk Script logischerweise nicht.
Ich gebe folgenden Befehl in der Konsole ein: run test.bat
Fall ich es mit: run test.bat > augabe-von-awk.log eingebe, wird der Pfad des Log File, also im oben genannten beispiel PATH_OF_LOGFILE_ROOT geschrieben (16:36 19.06.2008 e:\logs>#!/bin/bash).

Lösung?:
Wenn ich jetzt in meinem awk Skript (siehe oben), die ausgabe "print count" in ein log File schreiben würde, dann hätte ich das Resultat warscheindlich mehr oder weniger oder?

Dann würde ich:
Batch File ausführen.
Batch File sucht nach Logfile.
Batchfile findet logfile und führt awk skript aus.
Awk skript schreibt auswertung in neues Logfile.

Wie kann ich den "print count" in ein neues Logfile schreiben?

Deine Frage:
Oder mal anders gefragt, wie führst du das jetzt script aus?
Wie leutet die Befehlszeile?

Ich führe mein awk Skript mit awk -f skript.awk < c:/logs/logfile.log aus.
Danach kriege ich unten eine Auswertung.
Das sieht so aus:

awk-f skript < c:/logs/logfile.log
2343
 
....

e:\logs>#!/bin/bash).

....

Ich führe mein awk Skript mit awk -f skript.awk < c:/logs/logfile.log aus.

Du hast nicht wirklich einen mountpoint/verzeichnis "c:" erstellt, oder?

Da schliesst sich gleich meine nächste Frage an.
Über welches Betriebssystem reden wir hier oder genauer,
auf welchem OS führst du dieses Script aus?
 
auf welchem OS führst du dieses Script aus?

huckerby schrieb:
FALLS ICH DIES MIT EINEM BATCH FILE LÖSEN SOLLTE, TAUCHT EIN NEUES PROBLEM AUF: DIE AUSGABE
(...)
Das Problem mit einem Batch File:

Ich kann die Ausgabe des AWK Skripts nicht über ein Windows batch file einsehen.

huckerby schrieb:
Zum Batch Skript
(...)
Batch File ausführen.
Batch File sucht nach Logfile.
Batchfile findet logfile und führt awk skript aus.

uiae


edit: @TE: Auch cmd.exe kann afaik globbing. (Aber erwarte nicht, dass wir dir hier die Syntax dazu erklären..)
 
Zuletzt bearbeitet:
Du hast nicht wirklich einen mountpoint/verzeichnis "c:" erstellt, oder?

Da schliesst sich gleich meine nächste Frage an.
Über welches Betriebssystem reden wir hier oder genauer,
auf welchem OS führst du dieses Script aus?

ich Arbeite auf einem Windows XP ABER ich benütze cygwin, ein Tool welches mir eine Linux umgebung bietet.

Nein ich habe Laufwerk C nicht gemountet, dies war nur ein Beispiel.
 
ich Arbeite auf einem Windows XP ABER ich benütze cygwin, ein Tool welches mir eine Linux umgebung bietet.

Nein ich habe Laufwerk C nicht gemountet, dies war nur ein Beispiel.

Cygwin ist kein Linux! Hier also OT.
Nicht zuletzt deshalb sollte immer zuerst das OS und die verwendete Shell angegeben werden.
Deshalb sind Hinweise dazu hier auch nicht unbedingt kompatibel.
Ein Windows- Batchfile hat mit einer *nixuiden Shell so viel gemeinsam, wie ein Hubschrauber mit einem Moped.
Da ich auch WindowsXP und dessen Pseudoshell nicht kenne, kann ich leider auch nicht sagen, wo dieses OS die STDOUT hinschiebt.
Das ist wahrscheinlich ohnehin nur möglich, wenn der Inhalt deines imaginären Batchfiles bekannt ist.
Aber das wird hier dann wirklich OT.

Das Prinzip ist aber so wie bereits geschrieben.
Eine Schleife über alle Dateien an awk verfüttern.
Die genaue Syntax erkundest du bitte an geeigneterer Stelle, oder aus deiner Windowshilfe.


Wolfgang
 

Ähnliche Themen

awk skript: Probleme mit if und else Anweisungen

Gleicher Befehl über Script -> Fehler?

OpenSuse 12.3 / Tiefschlaf funktioniert nicht

Probs mit Perl script

Log filtern summieren mit AWK

Zurück
Oben