Datei filtern (mit mehreren Zeilen)

Z

Zappel

Grünschnabel
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
 
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
 
Kann es sein dass du falsch markiert hast beim letzten Teil?
 
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
 
Zuletzt bearbeitet:
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
 
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
 
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
 

Ähnliche Themen

Script um bestimme Zeilen einer Datei auszulesen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Rollei Mini Wifi Camcorder

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Linux Kernel VFS Panic HP Thin Client

Zurück
Oben