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?
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.
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“