(relational database operator)
join vergleicht zwei Dateien nach Vergleichsfeldern und verbindet alle Zeilenpaare, deren Vergleichsfeld identisch ist. Das Ergebnis gibt join auf die Standard-Ausgabe aus.
Beim join-Aufruf legen Sie für jede der beiden Dateien fest, welches Feld das Vergleichsfeld sein soll. Ein Feld wird von zwei Feldtrennzeichen begrenzt. join vergleicht jede Zeile der ersten Datei mit den Zeilen der zweiten Datei. Für jedes Zeilenpaar mit identischem Vergleichsfeld gibt join auf die Standard-Ausgabe eine Ausgabezeile aus, die sich aus bestimmten Feldern beider Zeilen zusammensetzt.
Vor dem Aufruf beachten
Jede Eingabedatei muss in ihrem Vergleichsfeld gemäß der gültigen Sortier-Reihenfolge sortiert sein (siehe sort). Bei Standard-Feldtrennung (join ohne Option -t) dürfen beim Sortieren führende Feldtrennzeichen 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).
Syntax
Format 1: | join[ -a n| -v n][ -e zeichenkette] |
Format 2: | join[ -a n][-e zeichenkette] |
Die Formate werden gemeinsam beschrieben, da die Option -j field in Format 2 den Optionen -1 feld -2 feld in Format 1 entspricht. -j1 feld ist äquivalent zu -1 feld und -j2 feld ist äquivalent zu -2 feld. Keine Option angegeben Vergleichsfeld für beide Dateien ist das erste Feld. Feldtrennzeichen für die Eingabezeilen sind Leerzeichen, Tabulatorzeichen und Neue-Zeile-Zeichen. Aufeinanderfolgende Feldtrennzeichen werden als ein einziges Feldtrennzeichen interpretiert; führende Feldtrennzeichen werden ignoriert. Für jedes Zeilenpaar mit identischem Vergleichsfeld gibt join auf die Standard-Ausgabe eine Ausgabezeile aus. Diese Ausgabezeile enthält in dieser Reihenfolge:
Die Felder der Ausgabezeilen sind durch ein Leerzeichen voneinander getrennt.
(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. Die Option -a darf nicht zusammen mit der Option -v angegeben werden.
Statt der Standardausgabe wird für jede Zeile in n ohne Entsprechung eine Zeile erzeugt. n kann 1 oder 2 sein. Wenn sowohl -v 1 als auch -v 2 angegeben wird, werden alle Zeilen ohne Entsprechung ausgegeben.
(e - empty output fields) join ersetzt leere Ausgabefelder durch die angegebene Zeichenkette.
Als Vergleichsfeld für die n-te Datei wird das m-te Feld festgelegt. Für n können Sie 1 oder 2 angeben, für m eine ganze Zahl größer gleich 1. Wenn Sie für die andere Datei keine Option -j angeben, dann ist das Vergleichsfeld für diese andere Datei das 1. Feld. n nicht angegeben: -j nicht angegeben:
(o - output format) join ändert das Format der Ausgabezeilen: Die Ausgabezeilen enthalten dann der Reihe nach die in liste angegebenen Felder. Das gemeinsame Vergleichsfeld wird nur dann ausgegeben, 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. Die Elemente trennen Sie durch Leer- oder Tabulatorzeichen.
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.
Zusätzlich ist das Neue-Zeile-Zeichen Feldtrennzeichen für die Eingabezeilen. Die Standard-Feldtrennzeichen Leer- und Tabulatorzeichen werden nur dann als Feldtrennzeichen interpretiert, wenn Sie diese Zeichen für c angeben.
Verbindet das Feld feld aus Datei 1. Felder sind dezimale Ganzzahlen ab 1.
Verbindet das Feld feld aus Datei 2. Felder sind dezimale Ganzzahlen ab 1.
Namen der beiden Dateien, die join nach Vergleichsfeldern verbinden soll. 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 voranstellen, 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 folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos join: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_COLLATE Beeinflusst die Sortierreihenfolge. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
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 München Hugo Stuttgart Ilse Hamburg Inhalt der Datei betrag: Albert 287.56 20.03.94 Hugo 23.15 25.06.93 Hugo 167.87 16.12.93 Ilse 1212.12 12.12.94 Ilse 1.98 01.01.94 Verbinden der beiden Dateien nach dem ersten Vergleichsfeld:
Verbinden der beiden Dateien und spaltenweise formatieren mit awk:
|
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 verbinden. 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.
|
Siehe auch
awk, comm, sort, uniq |