In einer Datei recordweise rückwärts lesen

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von DÖXIE, 30.11.2011.

  1. DÖXIE

    DÖXIE Mitglied

    Dabei seit:
    30.11.2011
    Beiträge:
    25
    Zustimmungen:
    0
    Hallo,

    ich habe folgende Herausforderung (cygwin)
    Ich lese eine Logdatei und suche darin nach einem bestimmten formatierten Eintrag (z.B. eine Fehlernummer).
    (Das funktioniert auch ohne Probleme)
    Wenn ich diesen Eintrag gelesen habe muss ich einen dazugehörigen Eintrag auslesen, welcher 4 Zeilen davor steht.
    Wie realisiere ich das ?
    Danke für Eure 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. #2 Remidemi, 30.11.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Hi

    Wie ließt du die Datei? Zeilenweise? Dann könntest für jede Zeile eine Variable +1 schreiben und dann die Varialbe - 4 rechnen.
    Diese berechnete Zeile kannst du dann mit head -n10 text.txt oder sed -n '10p' test.txt (wobei 10 für die Zeilennummer steht) ansprechen.
    Gibt bestimmt noch eine elegantere Variante die aktuelle Zeilennummer auszugeben ohne eine Varible hoch zu zählen, fällt mir jedoch gerade nichts ein.
     
  4. DÖXIE

    DÖXIE Mitglied

    Dabei seit:
    30.11.2011
    Beiträge:
    25
    Zustimmungen:
    0
    Ich lese die Datei mit "cat" und suche mit "grep"
     
  5. #4 Remidemi, 30.11.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Code:
    #!/bin/bash
    zeile=$(expr $(grep -n 5 test.txt | cut -d: -f1) - 4)
    head -n$zeile test.txt
    
    Bei grep musst du den Suchstring noch anpassen. grep -n gibt dir die Zeilennummer mit aus.
     
  6. DÖXIE

    DÖXIE Mitglied

    Dabei seit:
    30.11.2011
    Beiträge:
    25
    Zustimmungen:
    0
    Vielen Dank - Ich werde es versuchen !!
     
  7. DÖXIE

    DÖXIE Mitglied

    Dabei seit:
    30.11.2011
    Beiträge:
    25
    Zustimmungen:
    0
    Ich bekomme es nicht hin :(

    Also, die Fehlerdatei hat unter anderem folgenden Inhalt:

    2012-06-05 06:07:30,253 INFO 1.Nachricht, die die Datei 20120604093743-C2TC2333-RPE.xml enthält, wird versendet.
    2012-06-05 06:07:30,644 INFO Die Message-ID lautet: bdr128_1338869250547_266666
    2012-06-05 06:07:31,175 WARN 3703 Signierzertifikat eines Autors ist widerrufen
    2012-06-05 06:07:31,175 ERROR Vom Intermediär wurde keine Annahmebestätigung der Nachricht zurückgesandt. Fehler: 9705
    2012-06-05 06:07:31,175 ERROR OSCI-Nachricht wurde nicht gesendet.
    2012-06-05 06:07:31,175 INFO 2.Nachricht, die die Datei 20120604111856-C2TH4202-RPE.xml enthält, wird versendet.
    2012-06-05 06:07:31,582 INFO Die Message-ID lautet: bdr128_1338869251418_266667
    2012-06-05 06:07:32,175 WARN 3703 Signierzertifikat eines Autors ist widerrufen
    2012-06-05 06:07:32,175 ERROR Vom Intermediär wurde keine Annahmebestätigung der Nachricht zurückgesandt. Fehler: 9705
    2012-06-05 06:07:32,175 ERROR OSCI-Nachricht wurde nicht gesendet.
    2012-06-05 06:07:32,175 INFO 3.Nachricht, die die Datei 20120604155431-C2TM5712-RP.xml enthält, wird versendet.
    2012-06-05 06:07:32,535 INFO Die Message-ID lautet: bdr128_1338869252416_266668
    2012-06-05 06:07:33,066 WARN 3703 Signierzertifikat eines Autors ist widerrufen
    2012-06-05 06:07:33,066 ERROR Vom Intermediär wurde keine Annahmebestätigung der Nachricht zurückgesandt. Fehler: 9705
    2012-06-05 06:07:33,066 ERROR OSCI-Nachricht wurde nicht gesendet.
    usw.

    Ich suche mit grep nach dem Eintrag "Signierzertifikat". Diesen finde ich in den Zeilen 3 und 8 und 13 (es können natürlich viel mehr sein).
    Ich benötige aber den dazugehörigen Eintrag für die XML-Datei. Diese stehen in den Zeilen 1 und 6 und 11.
    Ich muss also irgendwie im "Pilgerschritt" die ganze Logdatei durchforsten.
    Wie kann ich das lösen ?
     
  8. #7 floyd62, 05.06.2012
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    wenn es reicht, beim Lesen des Logfiles die xml-Dateien zu merken, und die zuletzt gefundene dann einfach ausgegeben werden soll, wenn du auf eine Meldung mit 'Signierzertifikat' triffst, könnte das etwa so laufen:
    Code:
    sed -n -e '/xml/h' -e '/Signierzertifikat/{x;p}'
    
    Vorteil dabei wäre, dass die Datei nur einmal gelesen werden muss ...

    Gruss, A.
     
  9. DÖXIE

    DÖXIE Mitglied

    Dabei seit:
    30.11.2011
    Beiträge:
    25
    Zustimmungen:
    0
    vielen Dank für die Antwort,

    das Problem ist, dass ich nur dann den Namen der XML-Datei (zwei Zeilen höher) brauche, wenn mit dieser ein Problem auftrat.
    Oder umgekehrt: immer dann, wenn ich in der Logdatei den Eintrag "3703 Signierzertifikat eines Autors ist widerrufen" finde, benötige ich den Namen der XML-Datei zwei Zeilen vorher !!
    Da ich die Logdatei nur einmal am Tag lesen möchte, können mehrere XML-Namen vorkommen (wie in meinem Beispiel).
     
  10. #9 Spröde, 06.06.2012
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Code:
    grep -B 2 "WARN 3703" DEINE_FEHLERDATEI | grep -o "[^ ]*\.xml"
    Ergibt:
    Code:
    20120604093743-C2TC2333-RPE.xml
    20120604111856-C2TH4202-RPE.xml
    20120604155431-C2TM5712-RP.xml
    
     
  11. DÖXIE

    DÖXIE Mitglied

    Dabei seit:
    30.11.2011
    Beiträge:
    25
    Zustimmungen:
    0
    Guten Morgen "floyd62" und "Spröde",

    vielen Dank für Eure Hilfe !!

    Eure Scripte funktionieren tadellos und haben mir sehr geholfen.

    Super gemacht !

    Grüße,
    P
     
  12. DÖXIE

    DÖXIE Mitglied

    Dabei seit:
    30.11.2011
    Beiträge:
    25
    Zustimmungen:
    0
    Ihr Lieben,

    leider benötige ich nochmals Eure Hilfe
    ich suche in meiner Datei mit folgenden Befehl:
    cat message_id1.txt | sed -n -e '/govapp/h' -e '/L2ZK1164/{x;p}' >>message_id2.txt

    Jetzt möchte ich aber einen Suchbegriff als Variable verwenden

    In meinem Script erfolgt am Anfang ein read: read BHKZ - Die Eingabe ist dann L2ZK1164

    Jetzt soll diese Eingabe an sed übergeben werden !
    Das bekomme ich leider nicht hin.
     
  13. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  14. #12 Spröde, 18.06.2012
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Code:
    ... -e [COLOR="#FF0000"]"[/COLOR]/[COLOR="#FF0000"]$BHKZ[/COLOR]/{x;p}[COLOR="#FF0000"]"[/COLOR]
    Doppelte Anführungszeichen benutzen.
     
  15. DÖXIE

    DÖXIE Mitglied

    Dabei seit:
    30.11.2011
    Beiträge:
    25
    Zustimmungen:
    0
    Guten Morgen "Spröde",

    super, es funktioniert - ich habe mir schon die Finger gebrochen !
    Vielen Dank !!
     
Thema:

In einer Datei recordweise rückwärts lesen

Die Seite wird geladen...

In einer Datei recordweise rückwärts lesen - Ähnliche Themen

  1. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  2. Timestamp an Inhalt einer Textdatei anfügen

    Timestamp an Inhalt einer Textdatei anfügen: Hallo, ich als neuer, unerfahrener Nutzer von Linux und der bash hätte folgende Frage. Und zwar würde ich gerne mit einem command den Zeitstempel...
  3. SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird

    SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird: Hallo Ich bin andauernd Opfer einer Brute Force Attacke. Die IPs die fehlerhafte Logins produzieren werden nach dem 3ten Versuch gesperrt. Aber...
  4. Linux AIO: Populäre Distributionen auf einer ISO-Datei

    Linux AIO: Populäre Distributionen auf einer ISO-Datei: Das Projekt Linux AIO stellt verschiedene populäre Linux-Distributionen auf ISO-Dateien mit jeweils verschiedenen Desktops zusammen. Alle Systeme...
  5. Script zur Korrektur einer E-Book Datei

    Script zur Korrektur einer E-Book Datei: Hallo, wie der Titel schon sagt, suche ich ein Script (sed?) für eine E-Book Datei. In dieser kommen immer wieder "-" vor innerhalb von Worten, wo...