Dateien verbinden

E

electren

Jungspund
Hi...
ich stehe vor einem großen und vorallem schweren Problem....

Ich hab 3 verschiedene Dateien mit verschiedenen Informationen...
Aus diesen dreien muss ich eine Datei machen welche die Information aus allen 3 in einer bestimmten Reihenfolge angibt....
z.b.
Datei1: 123 HANS LUTZ TESTSTR 70 12345 HALLOWERDA
Datei2: 123 0143 3445532 5456 xxx yyy
Datei3: 0143 gkfkfk krkrkr laaae

Und in der Ausgabe-Datei sollte es beispielsweise so aussehen:
123 0143 LUTZ HANS TESTSTR 70 12345 HALLOWERDA USW....

"123" und "0143" sind dabei Art primary keys....

Ich hab kein blaßen Schimmer wie ich an das Problem rangehen soll.....

Vielleicht könnte ihr mir auf die Sprünge helfen.....

Vielen Dank
mfg ele
 
mit cat dacht ich mir schon fast...

Allerdings muss ich doch pipes verwenden um die eine datei zu buffern während ich die nächste einlese und diese beiden dann anhand der "primary keys" vergleichen will.... ??!!
:hilfe2:
 
hmm :-)
ich glaube nicht das cat mir automatisch die datenfelder ordnet.....

aber trotzdem Danke für die Antworten....
 
Keruskerfürst schrieb:
cat file1 file2 file3 > ergebnis
Ich muesste schon sehr auf dem Schlauch stehen, um zu uebersehen, dass das auch nur um Entferntesten mit der Problemstellung zu tun hat.

Da Du die Zeilen der verschiedenen Dateien vergleichen musst, und nichts darueber sagst, ob die Zeilen uebereinstimmen, wuerde ich mich an Deiner Stelle in perl o.ae. einlesen und dies dann erledigen.

Falls die drei Dateien bereits zeilenweise richtig angeordnet sind, d.h., die Informationen jeweils aus der gleichen Zeile in den drei Dateien geholt werden sollten, koenntest Du mit paste und awk arbeiten.
Code:
 paste file1 file2 file3 | awk '{print $1 $2 ....}'
 
Hallo

Deine Kriterien sind etwas schwammig. :think:
Wenn ich das dennoch richtig verstehe , willst du nicht nur zusammenkopieren, sondern auch die Werte entsprechend selektieren.
Wobei mir die Rolle der datei3 dann nicht ganz klar ist. :think:

Korrigier mich, wenn ich das falsch verstanden habe.
Vorschlag:
Code:
while read NUM REST ; do set x F=$(grep ^$NUM datei2); if [ -n "$3" -a "$(grep $3 datei3)" ]; then echo $NUM $3 $REST;fi; done <datei1 >ergebnis

Das liest aus datei1 die Zeilen, und sucht aus datei2 den Wert NUM am Anfang raus, gibt dann nur alles in gewünschter Reihenfolge aus wenn der Wert NUM nicht leer ist und das gefundene zweite Wort aus datei2 (hier in $3 siehe Anmerkung zu set x) in datei3 an führender Position vorkommt.

Sollte das nicht das sein was du willst, dann präzisier bitte die Bedingungen.

* Durch set x wird die Zeile am Leerzeichen getrennt. Dannach kann auf die einzelnen Variablen (Wörter) über $2=erster wert $3=zweiter Wert usw. zugegriffen werden.
Siehe auch man set

Gruß Wolfgang
Nachtrag: Ich gehe natürlich von eindeutigen Zeilen ohne Doppelung aus.
 
:-))
ok - ich versuche zu "entschwammen" - aber ich glaube du hast es genau richtig verstanden..
Datei1 enthält: Personen-ID, Namen, Vornamen, Geb-Dat
Datei2 enthält: Personen-ID, Straße, PLZ, Ort, Adress-ID
Datei3 enthält: Adress-ID, Land, Bevölkerung, whatever

Ergebnisdatei: Personen-ID, Name, Vorname, Geb-Dat, Straße, PLZ, Ort, Adress-ID, Land, usw...

Die Zeilen bzw. die IDs sind eindeutig!!

Vielen Dank für deine Antwort ... hilft mir schon mal sehr weiter...

@rikola: ebenfalls danke...
 
Hallo
Ja, ich hatte aus deinem ersten Beispiel nur nicht entnehmen können, welche Rolle Datei3 dabei spielt, weil du dort die Daten aus dieser nicht mit ausgegeben hast.

Aber das ist nur eine kleine Umstellung in meinem Vorschlag, und du hast was du willst. ;)
Versuch es mal selber.:headup:
Wenn du nicht klar kommst, frag einfach nochmal konkret was nicht geht.
Lies dich mal etwas in read ein.

Gruß Wolfgang
 
Zurück
Oben