join(1) join(1)
NAME
join - Zwei Dateien nach Vergleichsfeldern verbinden
SYNTAX
join [option ...] datei1 datei2
BESCHREIBUNG
join vergleicht zwei Dateien nach Vergleichsfeldern und verbindet alle
Zeilenpaare, deren Vergleichsfeld identisch ist. Das Ergebnis gibt
join auf die Standardausgabe aus.
Beim join-Aufruf legen Sie für jede der beiden Dateien fest, welches
Feld das Vergleichsfeld sein soll. Ein Feld wird von zwei Feldtrenn-
zeichen begrenzt. join vergleicht jede Zeile der ersten Datei mit den
Zeilen der zweiten Datei. Für jedes Zeilenpaar mit identischem Ver-
gleichsfeld gibt join auf die Standardausgabe eine Ausgabezeile aus,
die sich aus bestimmten Feldern beider Zeilen zusammensetzt.
Vor dem Aufruf beachten
Jede Eingabedatei muß in ihrem Vergleichsfeld gemäß der gültigen Sor-
tierreihenfolge sortiert sein [siehe sort(1)]. Bei Standardfeldtren-
nung (join ohne Option -t) dürfen beim Sortieren führende Feldtrenn-
zeichen nicht berücksichtigt werden (siehe sort, Option -b). Geben Sie
dagegen join mit Option -t an, müssen Sie führende Trennzeichen beim
Sortieren berücksichtigen (siehe sort ohne Option -b).
OPTIONEN
Keine Option angegeben:
Vergleichsfeld für beide Dateien ist das erste Feld. Feldtrenn-
zeichen für die Eingabezeilen sind Leerzeichen, Tabulatorzeichen
und Neue-Zeile-Zeichen. Aufeinanderfolgende Feldtrennzeichen wer-
den als ein einziges Feldtrennzeichen interpretiert; führende
Feldtrennzeichen werden ignoriert.
Für jedes Zeilenpaar mit identischem Vergleichsfeld gibt join auf
die Standardausgabe eine Ausgabezeile aus. Diese Ausgabezeile
enthält in dieser Reihenfolge:
- das gemeinsame Vergleichsfeld
- den Rest der Eingabezeile aus der ersten Datei
- den Rest der Eingabezeile aus der zweiten Datei.
Die Felder der Ausgabezeilen sind durch ein Leerzeichen voneinan-
der getrennt.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
join(1) join(1)
-1 m bzw. -2 m
Als Vergleichsfeld für die n-te Datei wird das m-te Feld festge-
legt. n steht für 1 oder 2. Für m geben Sie eine ganze Zahl grö-
ßer gleich 1 ein.
-1 bzw. -2 nicht angegeben: Vergleichsfeld für die n-te Datei ist
das 1. Feld.
Die Optionen -1 und -2 entsprechen der alten Option -j, die wei-
terhin unterstützt wird, jedoch nicht mit der neuen Syntax ver-
mischt werden darf. Zwischen alter und neuer Syntax besteht fol-
gende Zuordnung:
-j m entspricht -1 m -2 m
-j1 m entspricht -1 m
-j2 m entspricht -2 m
-a n (a - additional output) join gibt zusätzlich zur normalen Ausgabe
alle Zeilen der n-ten Eingabedatei aus, deren Vergleichsfeld mit
keinem Vergleichsfeld der anderen Datei übereinstimmt.
Für n können Sie 1 oder 2 angeben. Soll die Ausgabe für beide
Vergleichsdateien erfolgen, dann geben Sie -a 1 -a 2 an.
-a kann nicht zusammen mit -v verwendet werden.
-e zeichenkette
(e - empty output fields) join ersetzt leere Ausgabefelder durch
die angegebene Zeichenkette.
-o liste
(o - output format) join ändert das Format der Ausgabezeilen: Die
Ausgabezeilen enthalten dann der Reihe nach die in liste angege-
benen Felder. Das gemeinsame Vergleichsfeld wird nur dann ausge-
geben, wenn Sie es ausdrücklich in liste angegeben haben.
Für liste geben Sie eine Liste an, die aus Elementen der Form n.m
besteht, wobei n gleich 1 oder 2 und m größer gleich 1 ist. Ein
Element n.m steht für das m-te Feld der n-ten Datei. Für das Ver-
gleichsfeld geben Sie 0 (Null) an. Die Elemente trennen Sie durch
Kommata.
Leer- oder Tabulatorzeichen als Trennzeichen werden weiterhin
unterstützt, dürfen jedoch nicht mit der neuen Syntax vermischt
werden.
-t c Das Zeichen c wird als Feldtrennzeichen sowohl für die Eingabe-
als auch für die Ausgabezeilen definiert. Jedes Vorkommen von c
wird als Feldtrennzeichen interpretiert, d. h.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
join(1) join(1)
- zwei aufeinanderfolgende c kennzeichnen ein leeres Feld und
- ein führendes c kennzeichnet ein leeres erstes Feld.
Zusätzlich ist das Neue-Zeile-Zeichen Feldtrennzeichen für die
Eingabezeilen.
Die Standardfeldtrennzeichen Leer- und Tabulatorzeichen werden
nur dann als Feldtrennzeichen interpretiert, wenn Sie diese Zei-
chen für c angeben.
-v (v - vice versa) join gibt nur die Zeilen der n-ten Eingabedatei
aus, deren Vergleichsfeld mit keinem Vergleichsfeld der anderen
Datei übereinstimmt.
Für n können Sie 1 oder 2 angeben. Soll die Ausgabe für beide
Dateien erfolgen, dann geben Sie -v 1 -v 2 an.
-v kann nicht zusammen mit -a verwendet werden.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn datei1 mit -
beginnt.
datei1 datei2
Namen der beiden Dateien, die join nach Vergleichsfeldern verbin-
den soll.
Wenn Sie für datei1 einen Bindestrich - angeben, liest join von
der Standardeingabe.
Vorsicht:
Wenn die Dateien nicht nach ihrem Vergleichsfeld sortiert
sind, dann bearbeitet join nicht alle Zeilen!
Wenn Sie für datei1 einen numerischen Dateinamen (z. B. 1.2)
angeben und diesem Dateinamen die Option -o unmittelbar vor-
anstellen, dann kann das zu Problemen führen. Wenn Sie also
einen numerischen Dateinamen angeben wollen, dann geben Sie
ihn mit Schrägstrich (z. B. ./1.2) an.
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte.
LCCOLLATE beeinflußt die Sortierreihenfolge.
LCCTYPE bestimmt die Zeichenklassen und die Zeichenkonvertierung.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
join(1) join(1)
Wenn LCMESSAGES, LCCOLLATE oder LCCTYPE nicht oder als leere Zei-
chenkette definiert ist, wird der Wert von LANG als Standardwert für
die jeweils nicht gesetzte oder leere Variable herangezogen. Ist auch
LANG nicht oder als leere Zeichenkette definiert, verhält sich das
System so, als wäre es nicht internationalisiert.
Hat eine der Variablen für die internationale Umgebung einen ungülti-
gen Wert, verhält sich das System so, als wäre keine Variable gesetzt.
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
BEISPIELE
Beispiel 1
In der Datei ort ist einem Namen ein Ort zugeordnet, in der Datei
betrag sind denselben Namen je ein Betrag und ein Datum zugeordnet.
Beide Dateien sind nach den Namen sortiert. join soll beide Dateien
nach den Namen verbinden.
Inhalt der Datei ort:
Albert Muenchen
Hugo Stuttgart
Ilse Hamburg
Inhalt der Datei betrag:
Albert 287.56 20.03.88
Hugo 23.15 25.06.87
Hugo 167.87 16.12.87
Ilse 1212.12 12.12.88
Ilse 1.98 01.01.88
Verbinden der beiden Dateien nach dem ersten Vergleichsfeld:
$ join ort betrag
Albert Muenchen 287.56 20.03.88
Hugo Stuttgart 23.15 25.06.87
Hugo Stuttgart 167.87 16.12.87
Ilse Hamburg 1212.12 12.12.88
Ilse Hamburg 1.98 01.01.88
Verbinden der beiden Dateien und spaltenweise formatieren mit awk:
$ join ort betrag | awk '{printf("%-10s %-15s %-10s %-10s\n",$1,$2,$3,$4)}'
Albert Muenchen 287.56 20.03.88
Hugo Stuttgart 23.15 25.06.87
Hugo Stuttgart 167.87 16.12.87
Ilse Hamburg 1212.12 12.12.88
Ilse Hamburg 1.98 01.01.88
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
join(1) join(1)
Beispiel 2
In der Datei stadt ist einer Stadt ein Name zugeordnet, in der Datei
betrag (siehe Beispiel 1) ist einem Namen ein Betrag und ein Datum
zugeordnet. Die Datei stadt ist nach den Städten, die Datei betrag
nach den Namen sortiert. join soll beide Dateien nach den Namen ver-
binden.
Inhalt der Datei stadt:
Augsburg Egon
Hamburg Ilse
Muenchen Albert
Muenchen Franz
Stuttgart Hugo
Vergleichsfeld für die Datei stadt ist das 2. Feld, für die Datei
betrag das 1. Feld.
Bevor Sie die Dateien verbinden, müssen Sie die Datei stadt nach dem
2. Feld sortieren. Formatieren Sie anschließend wieder spaltenweise
mit awk:
$ sort -b -k 2 stadt | join -1 2 - betrag | \
> awk '{printf("%-10s %-15s %-10s %-10s\n",$1,$2,$3,$4)}'
Albert Muenchen 287.56 20.03.88
Hugo Stuttgart 23.15 25.06.87
Hugo Stuttgart 167.87 16.12.87
Ilse Hamburg 1212.12 12.12.88
Ilse Hamburg 1.98 01.01.88
SIEHE AUCH
awk(1), comm(1), sort(1), uniq(1).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98