93578
Goto Top

2 Textdateien mit je 2 Spalten (1 Spalte in jeder Datei ist gleich) zusammenfügen

Hallo liebe Gemeinde,
ich habe eine kleine Frage an Euch:

ich habe 2 Textdateien (natürlich als Muster, echte Dateien haben ca 200.000 Zeilen und mehrere Automarken):

Datei1:

Ford Fiesta:5000152
Ford Kuga:5000153
Ford Ka:5000166
Ford Fiesta:5000187
Ford Ka:5000152
Ford Mustang:5000153
Ford Kuga:5000148

Datei 2:

5000148:Lager1-ParkplatzB
5000152:Lager2-ParkplatzA
5000153:Lager2-ParkplatzB
5000166:Lager3-ParkplatzA
5000187:Lager3-ParkplatzC

Als Ergebnis brauche ich:

Ford Fiesta:5000152:Lager2-ParkplatzA
Ford Kuga:5000153:Lager2-ParkplatzB
Ford Ka:5000166:Lager3-ParkplatzA
Ford Fiesta:5000187:Lager3-ParkplatzC
Ford Ka:5000152:Lager2-ParkplatzA
Ford Mustang:5000153:Lager2-ParkplatzB
Ford Kuga:5000148:Lager1-ParkplatzB

Wie kann ich das ohne Datenbank realisieren? Leider verstehe im Perl nicht viel. Habe aber gehört, dass damit es am einfachsten und am schnellsten ist. Kann mir jemand dabei helfen?

Content-ID: 466611

Url: https://administrator.de/forum/2-textdateien-mit-je-2-spalten-1-spalte-in-jeder-datei-ist-gleich-zusammenfuegen-466611.html

Ausgedruckt am: 27.12.2024 um 01:12 Uhr

eisbein
eisbein 28.06.2019 um 09:53:55 Uhr
Goto Top
Hallo,

Geht es hier nun darum wie man die 2 Dateien zusammenfügt oder wie man das speziell mit Perl hin bekommt?

Gruß
eisbein
93578
93578 28.06.2019 um 09:59:34 Uhr
Goto Top
Im Grunde kann es auch mit bash sein, nur mit Perl soll es doch am schnellsten funktionieren (ich meine Geschwindigkeit)
eisbein
eisbein 28.06.2019 um 10:05:58 Uhr
Goto Top
93578
93578 28.06.2019 aktualisiert um 11:31:11 Uhr
Goto Top
Leider das ist nicht ganz was ich brauche. Im Grunde muss man da die Splate 2 mit der Spalte 1 in beiden textdateien abgleichen und entsprechen anordnen. Zusätzlich hat die Datei 2 deutlich weniger Zeilen als die Datei 1 (klar, viele viele Autos teilen wenige Lagern und dort vorhandene Großparkplätze).
colinardo
Lösung colinardo 28.06.2019 aktualisiert um 11:36:41 Uhr
Goto Top
Servus,
bin zwar momentan etwas Perl "eingerostet", aber probier mal (Pfade anpassen):
#!/usr/bin/perl
my $file1 = "./file1.txt";  
my $file2 = "./file2.txt";  
my $fileout = "./result.txt";  

open (my $FIN, "<", $file1);  
open (my $FOUT,">",$fileout);  

while(my $line = <$FIN>){
	chomp($line);
	my $num = (split(/:/,$line))[1];
	@found = `grep '^$num' $file2`;  
	if (@found){
		chomp(@found);
		print $FOUT join(":",$line,(split(/:/,@found))[1]) ."\n";  
	}else{
		print $FOUT join(":",$line,"<NOT FOUND>\n");  
	}
}
close $FIN;
close $FOUT;
Für den Fall das eine Nummer nicht zugeordnet werden kann wird im Beispiel <NOT FOUND> hinter den jeweiligen Eintrag in die Ausgabedatei geschrieben.

Mit Bash & Co ist das auch problemlos möglich, habe ich hier in ähnlicher Weise soweit ich mich erinnere irgendwo schon mal gepostet, finds nur gerade nicht, ließe sich aber auch bei Bedarf schnell runter tippen.

Grüße Uwe
93578
93578 28.06.2019 um 12:52:38 Uhr
Goto Top
Vielen Dank, Uwe. Du hast mich gerettet!