Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ join(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

awk(1)

comm(1)

sort(1)

uniq(1)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026