Datei filtern (mit mehreren Zeilen)

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Zappel, 19.09.2007.

  1. Zappel

    Zappel Grünschnabel

    Dabei seit:
    19.09.2007
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo,

    ich würde mich sehr über eine Antwort freuen. Ich habe folgendes Problem:

    Datei xyz.log beinhaltet folgendes:

    execution status for 'pflag -dev 0 -idx 2' (123 clients)
    32.2.22.40 (PC219): success (pid=1868, exit=0, dur=16s)
    @-->
    2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    <--@

    32.2.22.44 (PC220): success (pid=3824, exit=0, dur=16s)
    @-->
    2 partition (3): type 0x07 (NTFS) 32580334080 Bytes
    <--@

    32.2.21.135 (PC221): failed (no register response)
    32.2.22.45 (PC222): success (pid=732, exit=0, dur=16s)
    @-->
    2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    .
    .
    .
    121 from 123 clients have executed the command successfully


    Meine Problematik:
    Ich möchte die Datei aufbereiten, so dass Ich die farbig-zusammen-gehörigen Zeilen zu einer Zeile machen kann und dies dann wieder in einer Datei zu stehen habe. Wichtig ist, dass keine Infos verloren gehen. Es gibt die drei Fälle zu unterscheiden(siehe Farbmakierungen).

    Ich habe schon viel mit grep, sed und sort versucht, aber irgendwie stelle ich mich zu glatt an:

    Es wäre wirklich toll, wenn jemand helfen könnte!


    Danke Zappel
     
  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 Wolfgang, 19.09.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Und wenn du nun noch neben deiner verwendeten Shell die konkreten Kriterien nennst, kann man mal darüber reden was hier sinnvoll ist.
    Dem farbigen Zusammenhang fehlt der logische.
    Ohne den kann ich nicht wirklich helfen.

    Gruß Wolfgang
     
  4. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Kann es sein dass du falsch markiert hast beim letzten Teil?
     
  5. #4 Zappel, 19.09.2007
    Zuletzt bearbeitet: 19.09.2007
    Zappel

    Zappel Grünschnabel

    Dabei seit:
    19.09.2007
    Beiträge:
    3
    Zustimmungen:
    0
    Ersteinmal Danke für das Interesse!

    Ich habe folgende Filter im Kopf:
    "success" , "failed" , "6292339200" , "PC*"
    ->diese möchte ich Später analysieren, ob mein Verteilverfahren per Script geklappt hat!

    Die verschiedenen Farben symbolisieren, dass diese Zeilen zu einem PC von der mcast.exe zurückgegeben werden, deswegen möchte ich sie gern in einer Zeilen haben, damit ich mit "grep" oder so die LOGs in verschiedene Dateien schreiben(auswerten) kann.Ich habe einfach das Problem mit den Zeilen die zusammen gehören,aber ich sie nicht in eine Zeile bekomme!
    Wie z.B. LOG-ok, LOG-failed, LOG-partion-ok

    @smg
    Ich hatte einfach nicht den letzten Rest der LOG-Datei dazu genommen, spielt aber auch keine Rolle, da die vorkommenden Muster zu sehen sind!
    Vielen Dank
     
  6. #5 Wolfgang, 19.09.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Sorry, aber ich stehe hier neben mir, verstehe nur annähernd was du willst.
    Bedenke, dass Außenstehende nur das wissen, was du Preis gibst.
    Was du woher bekommst und was wohin gehen soll, ist hier nicht relevant.
    Allein klare Kriterien was zusammengehört!
    BTW die Frage nach deiner Shell ist auch noch offen.

    Beispielsweise was muss genau zutreffen, wenn die Zeile zusammengeführt werden soll.

    Wenn ich das so interpretiere, dass du nach jedem success oder false die nächste Zeile anhängen wills:
    Code:
    wolle@Nietzsche:/tmp
    $ cat testlog
    32.2.22.40 (PC219): success (pid=1868, exit=0, dur=16s)
    2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    32.2.22.44 (PC220): success (pid=3824, exit=0, dur=16s)
    2 partition (3): type 0x07 (NTFS) 32580334080 Bytes
    32.2.21.135 (PC221): failed (no register response)
    32.2.22.45 (PC222): success (pid=732, exit=0, dur=16s)
    2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    wolle@Nietzsche:/tmp
    
    $ sed -ne '/success\|failed/{N;s/\n/\t/g;p}' testlog
    32.2.22.40 (PC219): success (pid=1868, exit=0, dur=16s) 2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    32.2.22.44 (PC220): success (pid=3824, exit=0, dur=16s) 2 partition (3): type 0x07 (NTFS) 32580334080 Bytes
    32.2.21.135 (PC221): failed (no register response) 32.2.22.45 (PC222): success (pid=732, exit=0, dur=16s)
    
    Ist es das was du meinst?
    Oder gehören die @--> dazu?

    Gruß Wolfgang
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. Zappel

    Zappel Grünschnabel

    Dabei seit:
    19.09.2007
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo Wolfgang,

    vielen dank für die Mühen! Die interpretation deinerseits war sehr richtig!

    Ich arbeite in einer Korn-Shell! Habe mal die Befehlszeile ausprobiert, jedoch funktioniert es nicht!

    B0074661$ sed -ne '/success\|failed/{N;s/\n/\t/g;p}' stage6gb.log
    sed: command garbled: /success\|failed/{N;s/\n/\t/g;p}

    Habe aber einen anderen Ansatz verfolgt:
    cat stage6gb.log|./nocr|awk '{if ($0=="<--@") printf("\n"); else printf("%s\t",
    $0)}; END {print}' >stage6gb_neu.log

    -> wobei "nocr" ein Script ist, was aus der Datei die CR (\r) rausschmeisst!

    Hat eigentlich ganz gut funktioniert jedoch nicht ganz richtig, da ich die Zeile nach dem failed nicht abfangen konnte und die eigentlich nächste Zeile in die selbe Zeile schreibt.

    32.2.21.42 (PC110): success (pid=740, exit=0, dur=16s) @--> 2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    32.2.21.44 (PC111): success (pid=580, exit=0, dur=16s) @--> 2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    32.2.21.45 (PC112): failed (no register response) 32.2.21.49 (PC113): success (pid=1524, exit=0, dur=16s) @--> 2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    32.2.21.68 (PC114): success (pid=1152, exit=0, dur=20s) @--> 2 partition (3): type 0x0C (FAT32, extended int13) 6292339200 Bytes
    32.2.21.76 (PC115): success (pid=544, exit=0, dur=16s) @--> 2 partition (3): type 0x0C (FAT32, extended int13)

    Wäre wirklich nett, wenn ich nochmals um Hilfe bitten darf! Deine sed-command gefällt mir auch besser! wäre toll wenn wir das hin bekommen.

    Vielen Dank
    Zappel
     
  9. #7 Wolfgang, 20.09.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Vermutlich hast du kein GNU sed.
    Deine Version nebst OS wären hier hilfreich.
    Offensichtlich ist das <--@ ja doch teil der Datei, und nicht nur als Marker von dir eingefügt.
    Dann müsstest du natürlich drei Zeilen Laden und die \n entfernen.
    Versuch es mal einzeln, manche Exoten von sed akzeptieren nur ein command pro -e:
    Code:
    # ungetestet
    sed -ne '/success\|failed/N' -e 'N' -e 's/\n//g' -e 'p' input
    
    Übrigens kannst du \r auch gleich mit sed raushauen, oder tr verwenden.
    Schau in deiner SED-Manpage nach, ob du eventuell das ODER Symbol | nicht escapen brauchst.


    Gruß Wolfgang
     
Thema:

Datei filtern (mit mehreren Zeilen)

Die Seite wird geladen...

Datei filtern (mit mehreren Zeilen) - Ähnliche Themen

  1. Dateien filtern, die kein Datum im Dateinamen haben - wie?

    Dateien filtern, die kein Datum im Dateinamen haben - wie?: Guten Morgen :) Ich habe ein Sicherungsscript vorgesetzt bekommen, mit der Aufgabe, dass es jetzt auf einmal nicht mehr alle Dateien in einem...
  2. Ungerade Dateien Filtern / For-Schleife

    Ungerade Dateien Filtern / For-Schleife: Hallo Jungs, ich hoffe ihr könnt mir weiterhelfen. Hier die Aufgabe: In das Verzeichnis "/pfad/zu/den/dateien" wechseln. Dort stehen 20...
  3. Web Links aus einer Webseite/Textdatei filtern / WGET

    Web Links aus einer Webseite/Textdatei filtern / WGET: Hallo, ich möchte Updates für den AVG Virenscanner für Rechner die nicht am Internet hängen vollautomatisch von der AVG Webseite laden...
  4. Mac-Adresse aus Datei herausfiltern

    Mac-Adresse aus Datei herausfiltern: Hallo! Ich habe eine Datei, in der Mac-Adressen und der jeweilige Hostname aufgeführt sind, also z.B. ---------- 00:AA:77:88:99:BB...
  5. Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...

    Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...: Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und...