Zwei Zeilen in einer

Hallo Allerseits,

ich habe aus einem Logfile zwei verschiedene Zeilen ausgelesen und in ein Textfile geschrieben. Die Paar-Zeilen stehen untereinander. In jeder der zwei Zeilen gibt es ein eindeutiges Wort, das die zwei Zeilen in Beziehung setzt. Wie kann ich über diesen Primary-Key die beiden Zeilen in eine Zeile überführen?

Danke im Voraus.

MfG

AL

Gib uns doch mal ein Beispiel …

Gruss
HH

Hallo,

hier das Beispiel:

20150928|12:26:25.140|7B60|00000000|INFO |Manager|Token and Timestamp from ViLogger 7fa7|20150929133935|0|
20150928|12:26:25.140|7B60|14523938|INFO |Manager|Result send (to BeSS) ARR145239380180010000000000000000000000000000000000000000A01268133740012;d0796;h0480;w0299;Y677;Z304;X417
20150928|12:26:26.015|7B61|00000000|INFO |Manager|Token and Timestamp from ViLogger 7fa8|20150929133936|0|
20150928|12:26:26.015|7B61|13655792|INFO |Manager|Result send (to BeSS) ARR136557920181010000000000000000000000000000000000000000A82262172005687;d0749;h0501;w0419;Y
648;Z390;X393

Die Fettgedruckten Werte sind die Key-Werte, über die die beiden Zeilen gemerged werden sollen.

MfG

AL

Man kann leider nicht so recht erkennen, wo die Zeilenumbrüche sind, insbesondere da die Zeilen beim Zitieren hier gänzlich anders umgebrochen werden:

und das Resultat soll dann eine Zeile mit

20150928|12:26:25.140|7B60|00000000|INFO |Manager|Token and Timestamp from ViLogger 7fa7|20150929133935|0|20150928|12:26:25.140|7B60|14523938|INFO |Manager|Result send (to BeSS) ARR145239380180010000000000000000000000000000000000000000A01268133740012;d0796;h0480;w0299;Y*677;Z*304;X*417

sein (also eine Zeile, in der auch andere Trenner als | vorkommen)?

Gruß
HH

Hallo,

sorry. Die einzelnen Zeilen sind am Zeitstempel zu erkennen. Umgebrochen sind sie gar nicht. Ich wüsste aber nicht, wie ich das hier posten sollte.

Also:
Zeile1: 20150928|12:26:25.140|7B60|0…33935|0|
Zeile2: 20150928|12:26:25.140|7B60|145239…304;X417
Zeile3: 20150928|12:26:26.015|7B61|0000…3936|0|
Zeile4: 20150928|12:26:26.015|7B61|136557…;Z390;X393

Nun brauche ich - hier im Beispiel - Zeile 1 und Zeile 2 in einer Zeile und Zeile 3 und Zeile 4 in einer Zeile.
Von diesen Paaren gibt es einige Zehntausend. Das gemergte Ergebnis muss dann wiederum mit weiteren umfangreichen Files zeilenweise verglichen werden. Aber wenn ich die Paare in einer Zeile habe ist der nächste Step nicht so kompliziert.

Danke für Deine Mühe.

MfG

AL

Sei x0 die Eingabedatei und x1 die Ausgabedatei, dann bekommst du mit:

#!/usr/bin/perl -w

open(INPUT,"<x0") || die "cannot open input file";
open(OUTPUT,">x1") || die "cannot open output file";

my %stored_lines;

while (<INPUT>)
{
    chomp; 
    my $line    = $_;
    my @fields  = split /\|/;
    my $id      = $fields[2];

    if (defined($stored_lines{$id})) 
    {
        # found id
        print OUTPUT $stored_lines{$id} . $line . "\n";
    }
    else
    {
        $stored_lines{$id} = $line;
    }
}

close(INPUT);
close(OUTPUT);

exit 0;

das Gewünschte (ist nur „hingefrickelt“)

Gruß
HH

PS Ich hoffe mal, der Super-Editor hier hat nicht einige Zeichen „gefressen“ :smiley:

Hallo Hal9000,

vielen Dank für Deine Tipps. Werde es testen sobald ich dazu komme und gebe dann Bescheid, wie es ausschaut.

MfG

AL