Zwei csv-Files zusammenführen
Erstellt: 30.01.2012 21:58
Will man zwei Tabellen miteinander verbinden ist dies zum Beispiel unter MySQL mit "join" kein Problem.
Hat man zwei CSV-Files ist dies fast genauso einfach, wenn nicht sogar ein wenig leichter!
Dazu gibt es den Befehl "join" aus den GNU-Utils.
Hier ein einfaches und kleines Beispiel. Vorhanden sind zwei Dateien, die eine enthält Orchideen-Genus, die andere Orchideen-Species:
Die 1. Spalte enthält die ID, die 2. Spalte den Genus.
$ cat genus.csv
1;"Orchis"
2;"Epipactis"
3;"Gomphichis"
Die 1. Spalte enthält die ID, 2. Spalte die ID des Genus, 3. Spalte die Species
$ cat species.csv
1;1;"militaris"
2;1;"galilaea"
3;3;"traceyae"
4;3;"macbridei"
5;2;"helleborine"
6;3;"goodyeroides"
7;3;"foliosa"
8;3;"caucana"
9;2;"latifolia"
10;1;"stevenii"
Wichtig für "join" ist, dass die Spalten auf welche die Dateien zusammengesetzt werden sollen sortiert sind, ansonsten gibt es eine Fehlermeldung wie "join: Datei 2 ist nicht sortiert". Deshalb muss die Datei "species.csv" nun zuerst noch nach der 2. Spalte sortiert werden. Um das Beispiel zu vervollständigen wird die erste Datei auch gleich sortiert:
$ join -t";" -1 1 -2 2 <(sort genus.csv -t";" -n -k1 ) <(sort species.csv -t";" -n -k2)
1;"Orchis";10;"stevenii"
1;"Orchis";1;"militaris"
1;"Orchis";2;"galilaea"
2;"Epipactis";5;"helleborine"
2;"Epipactis";9;"latifolia"
3;"Gomphichis";3;"traceyae"
3;"Gomphichis";4;"macbridei"
3;"Gomphichis";6;"goodyeroides"
3;"Gomphichis";7;"foliosa"
3;"Gomphichis";8;"caucana"
Join:
-t";" gibt das Semilikon als Delemiterzeichen an.
-1 1 bedeutet, dass von der ersten Datei die erste Spalte benutzt wird.
-2 2 bedeutet, dass von der zweiten Datei die zweite Spalte benutzt wird.
Sort:
-t"; gibt das Semilikon als wiederum das Delemiterzeichen an.
-n steht für nummerische Sortierung.
-kN sortiert nach der Spalte N.
Es ist auch möglich einzelne Spalten auszuwählen:
$ join -t";" -1 1 -2 2 <(sort genus.csv -t";" -n -k1 ) <(sort species.csv -t";" -n -k2) -o 1.2,2.3
"Orchis";"stevenii"
"Orchis";"militaris"
"Orchis";"galilaea"
"Epipactis";"helleborine"
"Epipactis";"latifolia"
"Gomphichis";"traceyae"
"Gomphichis";"macbridei"
"Gomphichis";"goodyeroides"
"Gomphichis";"foliosa"
"Gomphichis";"caucana"
-o ermöglicht die Ausgabe zu definieren im Format F.N (F steht hier für die Dateinummer, N für die Spaltennummer), getrennt durch Kommas.
Andere nützliche Optionen zum Verhalten bei fehlenden Feldern oder nicht passenden Zeilen kann man natürlich der man-Page entnehmen.
Kommentare
Verfasse den ersten Kommentar!