JOIN(1)

名称
join - リレーショナルデータベースの操作

書式
join [ -a file_number | -v file_number] [-e string] [-o list] [-t char] [-1 field] [-2 field] file1 file2

解説
join ユーティリティは、指定されたファイルに対し “equality join” と呼ばれる、 各ファイルの同一の部分を結合する操作を施して結果を標準出力に出力します。

比較は、それぞれのファイルの “join field” と呼ばれるフィールドで 行ないます。デフォルトでは、各行の最初のフィールドが使用されます。 file1 と file2 の中で、 “join field” が一致した行が組みとなり、1 行で出力されます。 join field と、 file1 のうちの残りのフィールド、その後、 file2 のうちの残りのフィールドが 1 行になって出力されます。

フィールドの区切は、デフォルトではタブか空白文字です。複数のタブや空白 が繋っていても、1 つの区切とみなされ、読み込み時にこれらは無視されます。 出力時の各フィールドの区切は、デフォルトでは空白 1 文字です。

ファイルとフィールドの番号に関し、多くのオプションがあります。これらの 番号は常に、1 から始まります。すなわち、コマンドラインの最初のファイル はファイル番号 1 番であり、各行の最初のフィールドは、フィールド番号 1 番となります。

-a file_number
    デフォルトの出力に加えて、 file_number で指定したファイルに関して、同一フィールドがなかった行を表示します。

-e string
    出力時に、空のフィールドがあれば string で指定した文字列に置き換えます。

-o list
    join の処理して出力すべき行に関し、デフォルトの順序でなく、 list で指定した順序で各ファイルの各フィールドを出力 するようにします。 list の各要素は、 ‘file_number.field’ または ‘0’ (ゼロ) で表わし、要素間は、コンマ (‘’), か空白で区切ります (空白で区切る場合は、シェルが要素を別々のパラメータに分解しないよう クォーティングするか、複数の -o オプションを使用します)。

-t char
    入力および出力に使用するフィールドの区切として char で指定した文字を使用するようにします。 1行の中で出現したすべての char が有効です。

-v file_number
    file_number で指定したファイル番号のファイルに関して、 join 処理で同一フィールドが見つからなかった行だけを表示する ようにします。 -v 1 と -v 2 を同時に指定してもかまいません。

-1 field
    ファイル 1 の “join field” を field で指定した番号のフィールドとします。

-2 field
    ファイル 2 の “join field” を field で指定した番号のフィールドとします。

デフォルトのフィールド区切り文字が使われる場合、 結合の対象となるファイルは、結合すべきフィールドをキーとして sort(1) に -b オプションを付けたものでソートされていなければなりません。 そうしないと、 join はマッチするフィールドを一部しか表示しないことが あります。 -t オプションでフィールド区切り文字が指定されている場合、 -b オプション無しの sort(1) でソートされていなければなりません。

file1 または file2 のうちの片方が “-” であった場合には、標準入力が使われます。

診断

互換性
さらに、古いバージョンの join との互換のため、次のオプションも使用できます。

-a  デフォルトの出力に加え、file1 と file2 の各々で、同一フィールド がない行を表示します。

-j1 field
    ファイル1の ``join field'' を field で指定した番号のフィールドとします。

-j2 field
    ファイル2の ``join field'' を field で指定した番号のフィールドとします。

-j field
    file1 と file2 の ``join field'' を field で指定した番号のフィールドとします。

-o list ...
    歴史的な join の実装では -o オプションに複数の引数を許可していました。 これらの引数は、現在の -o オプションで説明したものと同じ “file_number.field_number” という形式でした。 しかし、この方法では ‘1.2’ と名付けられたファイルが存在すると、明らかに困難を生じます。

これらのオプションは、修正をしたくないような非常に古いシェルスクリプト のためだけに用意されています。 これらのオプションは、使うべきではありません。

規格
join コマンドは p1003.1-2001 互換です。

関連項目
awk(1), comm(1), paste(1), sort(1), uniq(1)