Log filtern summieren mit AWK

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von nico-e, 20.12.2008.

  1. nico-e

    nico-e Grünschnabel

    Dabei seit:
    20.12.2008
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo,

    ich versuche mit Hilfe von Shell-Commands ein Logfile zu filtern, welches wie folgt aussieht..

    Code:
    07/05/2008 12:31:40 {ID123} {ID123} SignOff <IP-addresse> 1 0 "terminated due to comm error"
    07/05/2008 12:31:40 {ID123} {ID123} Stats 94
    07/05/2008 12:32:14 {GID222} {Z123} SignOff <IP-addresse> 1 2747 "logged off"
    07/05/2008 12:32:14 {GID333} {Z32} Stats 93
    07/05/2008 12:32:27 {GID213} {Z32} NameChg ".bdaââri."->"bûdsâkiô."
    07/05/2008 12:33:09 {ID123} {ID123} requirePUID Non-Java login
    07/05/2008 12:33:09 {} {ZN123P} SignOn <IP-addresse> "400666" "32Bit Windows" ".bla blubb I bla."
    07/05/2008 12:33:13 {ID123} {ID123} requirePUID Non-Java login
    07/05/2008 12:33:13 {} {ZH123H} SignOn <IP-addresse> "903  2" "32Bit Windows" "b l a b."
    
    das Ergebnis soll die den namen (Letzte spalte) die Summe der Zeit (spalte 8 bei zeilen mit SignOff) und spalte 7 bei Zeilen mit SignOn

    meine aktueller versuch sieht so aus giebt aber nur die zeit in Stunden und die ClientID (spalte 3)aus
    Code:
    h$grep -r "SignOff" pserver*.log | grep "\{Z" |cut -d " " -f 3,8 | grep -v "{}" | awk '{zeit[$1]+=$2} END{for (name in zeit) print zeit[name]/60/60, name  }' | sort -n
    
    Gibt es eine Möglichkeit innerhalb AWK die ID(name) durch die Ausgabe von "grep * name(also die Client ID die AWK kennt)| grep SignOn | tail -1 | zerschneiden nach Spalte 7 und spalte name(alles was am ende der spalte in "Anführungstrichen" steht incl. Leerzeichen)" zu ersetzen
     
  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. #2 bytepool, 20.12.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ich kenne mich mit awk nicht aus, aber ich verstehe auch nicht wirklich was du genau filtern willst. In deinem zweiten Satz fehlt das Praedikat, was das Verstaendnis von deinem Post erschwert, auch wenn ich raten wuerde dass das fehlende Verb "enthalten" ist.

    Vielleicht koenntest du mal ein Beispiel geben was du hinterher gerne rausbekommen moechtest.

    mfg,
    bytepool
     
  4. nico-e

    nico-e Grünschnabel

    Dabei seit:
    20.12.2008
    Beiträge:
    2
    Zustimmungen:
    0
    Entschuldige bitte das fehlende Wort
    Beispiel für die Ausgabe:

    <summe des wertes in logspalte 8> <ID>

    Beispiel wie die Ausgabe aussehen soll:

    <summe des wertes in logspalte 8> <Name aus der letzen logspalte> <Text aus der 7.logspalte>

    mein Problem ist das die Werte anhand der ID in dem Logfile gesucht werden müssen, denn sie stehen nicht in der selbe Zeile und auch nicht unbedingt in der vorherigen.

    Code:
    grep -r "SignOff" pserver*.log     # Filtert Logfile nach SignOff
    grep "\{Z"     # Filtert nach zeilen die {Z enthalten
    cut -d " " -f 3,8     # blendet alle Spalten aus ausser 3 (Die ID) und 8 (die Anmeldedauer der Session)
    grep -v "{}" | awk '{zeit[$1]+=$2} END{for (name in zeit) print zeit[name]/60/60, name  }'     # Summiert die werte zur jeweiligen ID und giebt die Summe und die ID aus
    sort -n    # Sortiert das ganze von niedrigster summierter Zeit nach höchste Summierte zeit
    
    hier nochmal ein Beispiel der Zeilen des Logs welche für die Auswertung benötigt werden:
    Code:
    07/05/2008 12:33:09 [COLOR="Red"]{GID222}[/COLOR] {ZN123P} SignOn <IP-addresse> [COLOR="Lime"]"400666"[/COLOR] "32Bit Windows" [COLOR="Blue"]".bla blubb I bla."[/COLOR]
    07/05/2008 12:31:40 {ID123} {ID123} SignOff <IP-addresse> 1 0 "terminated due to comm error"
    07/05/2008 12:32:14 [COLOR="Red"]{GID222}[/COLOR] {Z123} SignOff <IP-addresse> 1 [COLOR="Orange"]2747 [/COLOR]"logged off"
    07/05/2008 12:33:09 {} {ZN123P} SignOn <IP-addresse> "400666" "32Bit Windows" [COLOR="Blue"]".bla blubb I bla."[/COLOR]
    07/05/2008 12:33:13 {} {ZH123H} SignOn <IP-addresse> "903  2" "32Bit Windows" "b l a b."
    daraus würde sich folgende zeile ergeben für die ID {GID222}
    2747 ".bla blubb I bla." "400666"
     
Thema:

Log filtern summieren mit AWK

Die Seite wird geladen...

Log filtern summieren mit AWK - Ähnliche Themen

  1. Umlaute Filtern

    Umlaute Filtern: Hi zusammen, bin recht neu was UNIX Skripten angeht und hänge gerade bei etwas fest. Ich möchte eine Datei erstellen in welche ein Befehl kommt....
  2. Artikel: E-Mails filtern mit KMail

    Artikel: E-Mails filtern mit KMail: Fast alle E-Mail-Programme bieten einen Filtermechanismus an. In diesem Artikel wird die Anwendung des Filtermechanismus von KMail erläutert....
  3. FFmpeg 2.0 mit OpenCL und vielen neuen Filtern

    FFmpeg 2.0 mit OpenCL und vielen neuen Filtern: Das FFmpeg-Projekt hat sein Multimedia-Framework in der Version 2.0 veröffentlicht. FFmpeg ermöglicht es Anwendern, nahezu alle Multimediaformate...
  4. Filtern und zuordnen

    Filtern und zuordnen: Hallo, ich muss eine Eingabe filtern und zuordnen zB.: man gibt ein ---------- # /tmp/script 123.alpha 321.beta beta-blabla test test:alpha...
  5. String filtern

    String filtern: Moin, ich habe mich mal wieder rangesetzt und versucht ein bisschen C++ zu machen. In meinem Programm möchte ich eine Website laden und dann...