マニュアルページセク ション 1: ユーザーコマンド

印刷ビューの終了

更新: 2014 年 7 月
 
 

join(1)

名前

join - リレーショナルデータベース演算子

形式

/usr/bin/join [-a filenumber] [-v filenumber] [-1 fieldnumber] 
     [-2 fieldnumber] [-o list] [-e string][-t char] file1 file2
/usr/bin/join [-a filenumber] [-j fieldumber] [-j1 fieldnumber] 
     [-j2 fieldnumber] [-o list] [-e string][-t char] file1 file2

説明

join は、ファイル file1 とファイル file2 で等結合を実行し、結果として生成される結合されたファイルを標準出力に書き込みます。デフォルトでは、フィールドは 1 つ以上のスペースまたはタブで区切られます。連続するスペースまたはタブ、あるいはその両方のうち、最後の 1 つ以外は無視されます。–t オプションを使用すると、フィールドの区切り文字を変更できます。

join フィールドとは、各ファイル内のフィールドであり、このフィールドでファイルが比較されます。デフォルトでは、join により、一致する join フィールドがある files1files2 内の行のペアごとに 1 行が出力に書き込まれます。デフォルトの出力行は、join フィールド、file1 の残りのフィールド、file2 の残りのフィールドで構成されますが、これは、–o オプションを使用すると変更できます。また –a オプションを使えば、一致しなかった行も出力できます。–v オプションは、一致しなかった行だけを出力するために使用します。

ファイル file1 とファイル file2 は、結合されるフィールド上でソート –b の照合順序でソートされている必要があります。ソートされていない場合、結果は不確定です。

file1 または file2- の場合、join は標準入力を使用します。開始位置は現在の位置です。

オプション

次のオプションには filenumber という引数を使用するものがあります。この引数の値は 1 または 2 で、それぞれ file1 または file2 を表します。

–a filenumber

通常の出力に加え、ファイル filenumber 内の対にならなかった行についても出力します。filenumber の値は 1 または 2 です。–a 1–a 2 の両方を指定すると、対にならなかった行がすべて出力されます。

–e string

–o オプションで選択したリスト内にある空の出力フィールドを string 文字列で置き換えます。

–j fieldnumber

–1 fieldnumber –2fieldnumber と同等です。フィールドには 1 から始まる番号が付きます。

–j1 fieldnumber

–1fieldnumber と同じ意味です。フィールドには 1 から始まる番号が付きます。

–j2 fieldnumber

–2fieldnumber と同じ意味です。フィールドには 1 から始まる番号が付きます。

–o list

各出力行は、list に指定されたフィールドを含みます。list で選択されたフィールドのうち入力中に現れないものは、空の出力フィールドとして扱われます (–e オプションの説明を参照)。この各要素の形式は filenumber.fieldnumber または 0 で、後者は join フィールドを表します。特に指定しないかぎり、共通フィールドは出力しません。

–t char

char で示す文字を区切り文字として使用します。1 つの行に char が複数個あるとき、それらはすべて有効です。文字 char は、入力と出力の両方においてフィールド区切り文字として使われます。このオプションを指定する場合、照合される語は –b オプションなしで sort を実行した場合にも同一とみなされる語でなければなりません。

–v filenumber

デフォルト形式の出力ではなく、filenumber 内の対にならなかった行だけを出力します。filenumber の値は 1 または 2 です。–v 1–v 2 の両方を指定すると、対にならなかった行がすべて出力されます。

–1 fieldnumber

ファイル 1fieldnumber 番目のフィールドで結合します。フィールド番号は 1 から始まる 10 進整数です。

–2fieldnumber

ファイル 2fieldnumber 番目のフィールドで結合します。フィールド番号は 1 から始まる 10 進整数です。

オペランド

次のオペランドがサポートされています。

file1

結合するファイルのパス名。file1file2 のどちらかに を指定すると、そのファイルの代わりに標準入力が使用されます。

file2

結合するファイルのパス名。file1file2 のどちらかに を指定すると、そのファイルの代わりに標準入力が使用されます。

file1file2 は、結合するフィールド (通常は各行の最初のフィールド) 上で LC_COLLATE によって決められた照合順序で昇順にソートされていなければなりません (sort(1) を参照)。

使用法

ファイルが 2G バイト (231 バイト) 以上ある場合の join の動作については、largefile(5) を参照してください。

使用例 1 パスワードファイルとグループファイルの結合

次のコマンド行は、パスワードファイルとグループファイルを結合し、数値グループ ID のマッチングを行い、ログイン名、グループ名、およびログインディレクトリを出力します。ファイルは、グループ ID フィールド上において ASCII の照合順序でソートされていると仮定します。

example% join -j1 4-j2 3 -o 1.1 2.1 1.6 -t:/etc/passwd /etc/group
使用例 2 –o オプションの使用

–o 0 は、基本的には結合フィールドを統合したフィールドを表します。たとえば、phone という名のファイルは次のような内容だとします。

!Name           Phone Number
Don             +1 123-456-7890
Hal             +1 234-567-8901
Yasushi         +2 345-678-9012

また、fax というファイルは次のような内容だとします。

!Name           Fax Number

Don             +1 123-456-7899

Keith           +1 456-789-0122

Yasushi         +2 345-678-9011

この 2 つのファイルで、長いスペース部分は 1 つのタブ文字を表しているものとします。このとき次のようなコマンドを実行します。

example% join -t"tab" -a 1 -a 2 -e '(unknown)' -o 0,1.2,2.2 phone fax

すると次のような出力が生成されます。

!Name           Phone Number           Fax Number
Don             +1 123-456-7890         +1 123-456-7899
Hal             +1 234-567-8901         (unknown
Keith           (unknown)               +1 456-789-012
Yasushi         +2 345-678-9012         +2 345-678-9011

環境変数

join の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、LC_COLLATE、および NLSPATH。

終了ステータス

次の終了ステータスが返されます。

0

入力ファイルはすべて正常に出力されました。

>0

エラーが発生した。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
CSI
有効
インタフェースの安定性
確実
標準
standards(5) を参照してください。

関連項目

awk(1), comm(1), sort(1), uniq(1), attributes(5), environ(5), largefile(5), standards(5)

デフォルトでフィールドを分離する場合、照合順序は b を付けた sort コマンドに対応した順序です。–t の場合、照合順序は b を付けない sort コマンドの順序になります。

joinsortcommuniqawk コマンドの規則は一律ではありません。