Previous: paste invocation, Up: Operating on fields within a line


8.3 join: 共通のフィールドで行を結合

joinは,同一の結合フィールドを持つそれぞれの入力行の組に対し, 一行を標準出力に書き出します.概要です.

     join [option]... file1 file2

file1またはfile2は(両方ではなく)‘-’が可能で,標準入力 を意味します.file1file2は,結合フィールド上で並べ替えし ておくべきです.

通常,並べ替えの順序は,LC_COLLATEロカールで指定されている順番で す.-tオプションが与えられない限り,sort -bのように, 並べ替えの比較では結合フィールドの最初の空白は無視されます. --ignore-caseオプションが与えられている場合,sort -fの ように,並べ替えの比較では結合フィールドの文字の大文字小文字は無視され ます.

しかし,GNUの拡張として,入力に組になる行が無い場合,並び順は,上記の 並び替えの比較が同じであると考えられる場合,そしてそのときだけ,二つの フィールドが同じであると考えられる順番になるはずです.例えば,以下のよ うになります.

     $ cat file1
     a a1
     c c1
     b b1
     $ cat file2
     a a2
     c c2
     b b2
     $ join file1 file2
     a a1 a2
     c c1 c2
     b b1 b2

デフォルトは,以下の通りです.結合フィールドは,それぞれの行の最初の フィールドです.入力のフィールドは,一つ以上の空白で分離されていて,行 の前の空白は無視されます.出力のフィールドはスペースで分離されています. それぞれの出力行は,結合フィールド,file1の残りのフィールド,そ してfile2の残りのフィールドから成り立ちます.

プログラムは,以下のオプションを受け入れます.Common optionsも参 照してください.

-a file-number
ファイルfile-number (‘1’または‘2’のいずれか)で組になっ ていないそれぞれの行に対し,一行を通常の出力に追加して出力します.
-e string
入力で欠けているこれらの出力フィールドを,stringで置換します.
-i
--ignore-case
キーを比較するとき,大文字小文字の違いを無視します.このオプションを用 いると,入力ファイルの行は同じ方法でソートされている必要があります.こ の順序を生成するために,‘sort -f’を使用してください.
-1 field
ファイル1のフィールドfield(正の整数)で結合します.
-2 field
ファイル2のフィールドfield (正の整数)で結合します.
-j field
-1 field -2 field’と同じです.
-o field-list
field-listの書式に従い,それぞれの出力行を生成します. field-listのそれぞれの要素は,単一文字‘0’,または,ファイル 番号のm,‘1’または‘2’,そしてnが正のフィールド番 号となっている,m.nの形式になります.

0’のフィールド指定は,結合フィールドを示します.ほとんどの場合, ‘0’フィールドの指定の機能は,対応する結合フィールドとなる,明示的 なm.nを用いて再現できます.しかし,(-aまたは-v オプションを用いて)組にならない行を出力するとき,両方のファイルで組に ならない行がある場合,field-listm.nを用いて結合フィール ドを指定する方法はありません.joinにその機能を与えるため, POSIXは‘0’フィールド指定の表記を考え出しました.

field-listの要素は,カンマまたは空白で分けられています.全ての出 力行は – -a-vオプションで出力されるものを含め – 指定されたfield-listが適用されます.

-t char
文字charを入出力のフィールドセパレータとして使用します.入力ファ イルでcharが見つかるたびに,意味があるものとして扱います.
-v file-number
通常の出力の代わりに,ファイルfile-number (‘1’または ‘2’)の組にならないそれぞれの行に対し,一行を出力します.

更に,gnu joinは,単一の引数で呼び出されたとき,オプショ ン--help--versionは認識されます.See Common options.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.