Thread Dateien miteinander vergleichen über Hash`s ? (2 answers)
Opened by tecker at 2008-02-26 14:27

tecker
 2008-02-26 14:27
#106350 #106350
User since
2008-02-26
77 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

habe folgendes Problem. Ich möchte 2 (und mehr) Dateien der Form
("Zähler : URL"):

file1:
49837 : www.immobilienscout24.de
37188 : img.ui-portal.de
36169 : images.gmx.net
32470 : img.web.de
[...]

file2:
49837 : www.immobilienscout24.de
37188 : img.ui-portal.de
36169 : images.gmx.net
32470 : img.web.de
[...]

zeilenweise miteinander vergleichen (habe bewusste 2x den gleichen Inhalt gewählt da Prinzip das gleiche ist). Ich will bei Übereinstimmung der URLs, die Zähler addieren und in eine neue Datei file3 schreiben.

Meine Variante (die wohl auch uneffizient ist) erzeugt foglendes:
file3:
99674 : www.immobilienscout24.de
74376 : img.ui-portal.de
74376 : img.ui-portal.de
74376 : img.ui-portal.de
[...]

.... jeder Eintrag (bis auf der 1.) kommt so oft, wie Zeilen in file2 sind. Jemand eine Idee wie man das alles besser oder ggf. mit Hash`s lösen kann??

Wäre sehr dankbar falls mir jmd. weiterhelfen kann.

VG

Hier mein Versuch:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
!/usr/bin/perl -w

open(AUF1, "<output.0.dat");
@lines1=<AUF1>;
close(AUF1);

open(AUF2, "<output.1.dat");
@lines2=<AUF2>;
close(AUF2);

open(AUF3, ">new.output.dat");

foreach $line1 (@lines1)
{
#RegEx auf 1. Zeile und speichern von Zaehler in $line_count und URL in $line_url

$line1 =~ /(\d+)\s:\s([a-zA-Z0-9\.\-]+)/g;

$line1_count = $1;
$line1_url = $2;

foreach $line2 (@lines2)
{

$line2 =~ /(\d+)\s:\s([a-zA-Z0-9\.\-]+)/g;

$line2_count = $1;
$line2_url = $2;

if ($line1_url eq $line2_url)
{
$new_count=($line1_count+$line2_count);
print AUF3 "$new_count : $line1_url\n";
}
}

}
close(AUF3);

View full thread Dateien miteinander vergleichen über Hash`s ?