join コマンド

目的

2 つのファイルのデータ・フィールドを結合します。

構文

結合-a 値 FileNumber -v (V) FileNumber ] [  -e (E) ストリング ] [  リスト ] [  T キャラクター ] [ -1 フィールド ] [  -2 フィールド File1 File2

説明

join コマンドは、 File1 パラメーターと File2 パラメーターで指定されたファイルを読み取って、フラグに従ってファイル内の行を結合し、結果を標準出力に書き出します。 File1 および File2 パラメーターに指定するファイルは、どちらもテキスト・ファイルでなければなりません。 File1File2 はどちらも、join コマンドを呼び出す前に、 結合されるフィールド上でソート -b の照合シーケンスでソートされていなければなりません。

両ファイル内の同一の結合フィールドごとに 1 行が出力に表示されます。 結合フィールドは入力ファイル内のフィールドで、join コマンドによって検査され、何を出力に入れるかが決定されます。 出力行は、結合フィールド、File1 パラメーターによって指定されたファイルの行の残部、 および File2 パラメーターによって指定されたファイルの行の残部で構成されます。 ファイル名として - (ダッシュ) を置き換えることにより、 File1 パラメーターまたは File2 パラメーターの代わりに標準入力を指定します。 両方の入力ファイルを - (ダッシュ) で指定することはできません。

通常、フィールドは、スペース、タブ文字、または改行文字で区切られます。 この場合、join コマンドは連続するセパレーターを 1 つのものとして処理し、先行するセパレーターを破棄します。

フラグ

項目 説明
-1 フィールド File1 入力ファイルの Field 変数で指定されたフィールドを使用して、2 つのファイルを結合します。 Field 変数の値は、正の 10 進整数でなければなりません。
-2 フィールド File2 入力ファイルの Field 変数で指定されたフィールドを使用して、2 つのファイルを結合します。 Field 変数の値は、正の 10 進整数でなければなりません。
-a FileNumber FileNumber 変数で指定されたファイル内の行のうち、結合フィールドがもう一方の入力ファイルのどの行とも一致しない行について、1 行ずつ出力行を作成します。 この出力行はデフォルト出力とは別に作成されます。 FileNumber 変数の値は、それぞれ File1 パラメーターおよび File2 パラメーターで指定したファイルに対応する 1 または 2 でなければなりません。 このフラグを -v フラグと共に指定すると、このフラグは無視されます。
-e (E) ストリング 空の出力フィールドを String 変数で指定した文字列で置き換えます。
リスト List 変数で指定されたフィールドから構成される出力行を構築します。 List 変数には、以下のいずれかの形式が適用されます。
FileNumber。フィールド
この場合、FileNumber はファイル番号で、Field は 10 進整数のフィールド番号です。 複数のフィールドは引用符で囲んで、, (コンマ) またはスペース文字で区切ります。
0 (ゼロ)
結合フィールドを表します。 -o 0 フラグを指定すると、実際には結合フィールドの共有体が選択されます。
キャラクター 入力および出力内のフィールド・セパレーターとして、Character パラメーターに指定された文字を使用します。 この文字は行全体で有効です。 デフォルトのセパレーターはスペースです。 デフォルトのフィールド区切りでは、照合順序はsort-bコマンドのものとなる。 -t を指定すると、照合シーケンスは単純なソートの順序になります。 タブ文字を指定する場合は、単一引用符で囲みます。
-v FileNumber FileNumber 変数で指定されたファイル内の行のうち、結合フィールドがもう一方の入力ファイルのどの行とも一致しない行について、1 行ずつ出力行を作成します。 デフォルト出力は作成されません。 FileNumber 変数の値は、File1 パラメーターおよび File2 パラメーターで指定した各ファイルに対応する 1 または 2 でなければなりません。 このフラグと共に -a フラグを指定すると、-a フラグは無視されます。

終了状況

このコマンドは、以下の終了値を戻します。

項目 説明
0 正常終了。
>0 エラーが発生しました。

注: 以下の例に示す垂直方向の位置合わせは、出力と整合しない可能性があります。
  1. 最初のフィールドが同じ 2 つのファイルに対して単純な結合操作を実行するには、次のように入力します。
    join phonedir names
    :NONE.phonedirファイルには以下の名前が含まれます。
    Adams A.        555-6235
    Dickerson B.    555-1842
    Erwin G.        555-1234
    Jackson J.      555-0256
    Lewis B.        555-3237
    Norwood M.      555-5341
    Smartt D.       555-1540
    Wright M.       555-1234
    Xandy G.        555-5015
    およびnamesファイルには、以下の名前と部門番号が含まれます。
    Erwin           Dept. 389
    Frost           Dept. 217
    Nicholson       Dept. 311
    Norwood         Dept. 454
    Wright          Dept. 520
    Xandy           Dept. 999
    join コマンドは、以下を表示します。
    Erwin G.        555-1234        Dept. 389
    Norwood M.      555-5341        Dept. 454
    Wright M.       555-1234        Dept. 520
    Xandy G.        555-5015        Dept. 999
    各行は、結合フィールド (最後の名前) と、それに続く残りの行で構成されます。phonedir行の残りの部分を表示します。namesを適用します。
  2. 結合 コマンドを使用して一致しない行を表示するには、次のように入力します。
    join  -a2 phonedir names
    If thephonedir およびnamesファイルが例 1 と同じである場合、 結合 コマンドは次のように表示します。
    Erwin G.        555-1234         Dept. 389
    Frost                            Dept. 217
    Nicholson                        Dept. 311
    Norwood M.      555-5341         Dept. 454
    Wright M.       555-1234         Dept. 520
    Xandy G.        555-5015         Dept. 999
    このコマンドは、例 1 と同じ結合操作を実行し、一致するものがない名前の行もリストします。phonedirを適用します。 名称FrostおよびNicholsonに項目がない場合でも, リストに組み込まれます。phonedirを適用します。
  3. 結合 コマンドを使用して、選択したフィールドを表示するには、次のように入力します。
    join  -o 2.3,2.1,1.2,1.3 phonedir names
    これによって、次のフィールドが指定された順序で表示されます。
    項目 説明
    フィールド 3 names 部門番号
    フィールド 1names
    フィールド 2phonedir 名前の頭文字
    フィールド 3phonedir 電話番号
    If thephonedir ファイルおよびnamesファイルが例 1 と同じである場合、 結合 コマンドは次のように表示します。
    389              Erwin G.        555-1234
    454              Norwood M.      555-5341
    520              Wright M.       555-1234
    999              Xandy G.        555-5015
  4. 最初のフィールド以外のフィールドで結合操作を実行するには、次のように入力します。
    sort -b +2 -3 phonedir | join  -1 3 - numbers
    このコマンドは、以下の行を結合します。phonedirおよびnumbersファイルの 3 番目のフィールドの比較phonedirファイルを最初のフィールドにnumbersを適用します。

    最初に、このコマンドは以下をソートします。phonedirファイルは 3 番目のフィールドでソートされます。これは、両方のファイルが結合フィールドでソートされなければならないためです。 次に、sort コマンドの出力がパイプを通して join コマンドに入力されます。 - (ダッシュ) が付いているので、join コマンドはこの出力を最初のファイルとして使用します。 この-1 3フラグは、ソートの 3 番目のフィールドを定義します。phonedirファイルを結合フィールドとして使用します。 これは、以下の最初のフィールドと比較されます。numbersこれは、結合フィールドが -2 フラグで指定されていないためです。

    If thenumbersファイルの内容:

    555-0256
    555-1234
    555-5555
    555-7358
    このコマンドは, リストされた名前を表示します。phonedirファイルまたは各電話番号:
    555-0256        Jackson J.
    555-1234        Erwin G.
    555-1234        Wright M.
    join コマンドは、指定されたフィールドに対して、一致するものをすべてリストすることに注意してください。 この場合、 結合 コマンドは、以下の両方をリストします。Erwin G. およびWright M.電話番号を持っているとして555-1234. 数値555-5555表示されていないため, リストされていません。phonedirを適用します。

ファイル

項目 説明
/usr/bin/join join コマンドが入っています。
/usr/lib/nls/loc/*.src 照合情報が入ってます。