AWK 2 Fragen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von huckerby, 19.06.2008.

  1. #1 huckerby, 19.06.2008
    huckerby

    huckerby Grünschnabel

    Dabei seit:
    19.06.2008
    Beiträge:
    5
    Zustimmungen:
    0
    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=)
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    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?
     
  4. #3 huckerby, 19.06.2008
    huckerby

    huckerby Grünschnabel

    Dabei seit:
    19.06.2008
    Beiträge:
    5
    Zustimmungen:
    0

    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:(
     
  5. #4 NoXqs, 19.06.2008
    Zuletzt bearbeitet: 19.06.2008
    NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    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?
     
  6. #5 huckerby, 19.06.2008
    huckerby

    huckerby Grünschnabel

    Dabei seit:
    19.06.2008
    Beiträge:
    5
    Zustimmungen:
    0

    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:
    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
     
  7. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    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?
     
  8. #7 Gott_in_schwarz, 19.06.2008
    Zuletzt bearbeitet: 19.06.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    uiae


    edit: @TE: Auch cmd.exe kann afaik globbing. (Aber erwarte nicht, dass wir dir hier die Syntax dazu erklären..)
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 huckerby, 19.06.2008
    huckerby

    huckerby Grünschnabel

    Dabei seit:
    19.06.2008
    Beiträge:
    5
    Zustimmungen:
    0
    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.
     
  11. #9 Wolfgang, 19.06.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
Thema:

AWK 2 Fragen

Die Seite wird geladen...

AWK 2 Fragen - Ähnliche Themen

  1. Sicherheitsfragen zu PHP-Anwendungen auf der Webseite

    Sicherheitsfragen zu PHP-Anwendungen auf der Webseite: Hallo miteinander, habe eine kleine Webseite (4 Jahre statisch, keine Sicherheitsprobleme bisher) und ich frage mich, wie sicher die Verwendung...
  2. Fragen zu find

    Fragen zu find: Hallo an alle, Ich bin ziemlich neu in der Linux Welt und habe paar frage Ich soll alle Datein im system finden die vor weniger als drei Tagen...
  3. Sicherung der Systempartition inkl. Bootloader + ein paar Verständnisfragen

    Sicherung der Systempartition inkl. Bootloader + ein paar Verständnisfragen: Hallo, ich habe 2 Mediacenter-PC im Wohn- und Schlafzimmer in denen jeweils Ubuntu auf einer SSD installiert wurde. Einer läuft mit einem Bios,...
  4. Freedomvote: Zehn Fragen über digitale Freiheiten für die Schweizer Parlamentswahl

    Freedomvote: Zehn Fragen über digitale Freiheiten für die Schweizer Parlamentswahl: Die FSFE Schweiz und die Swiss Open Systems User Group haben eine Kampagne gestartet, die die Kandidaten zu Themen wie Netzpolitik und freie...
  5. Mozilla: Fragen und Antworten zu WebExtensions

    Mozilla: Fragen und Antworten zu WebExtensions: Mozilla hat mit einem FAQ auf die Aufregung reagiert, die die Ankündigung der Einstellung der bisherigen Erweiterungsschnittstelle verursachte....