join - 共通フィールドをもつ2つのファイルを行単位で結合


join コマンドは、指定した共通フィールドをもつ2つのファイルを行単位で結合します。 2つでなければいけません。 またその共通フィールドは一致するように sort されていなければいけません。例えば math.txt

A 80
B 30

と english.txt

A 70
B 100

があったとします。

% join math.txt english.txt
A 80 70
B 30 100

となります。

デフォルトの区切り文字が空白なので math.txt や english.txt が

A,80
B,30

のように、, を区切り文字に使用している場合は -t オプションで指定してあげます。

% join -t',' math.txt english.txt

次に file1

A txt 20
B jpg 80

という内容のファイルと、file2

A jpg 30
B txt 40

という内容のファイルがあるとします。

% join file1 file2
A txt 20 jpg 30
B jpg 80 txt 40

となるのは予想通りです。オプション -j でキーとなるフィールド番号を指定できるのですが、このまま

% join -j 2 file1 file2

としても、期待された結果はでません。キーとなるフィールド部分を sort しておかなければいけません。

% sort +1 file1 > file11
% sort +1 file2 > file22
% join -j 2 file11 file22
jpg B 80 A 30
txt A 20 B 40

のようにしなければいけません。 sort で指定するフィールド番号と join で指定するフィールド番号は 1 つずれるので注意です。 join は2つのファイルを指定しなければいけないので、パイプも利用できないのがちょっと嫌ですね。

単純な行単位での結合には paste コマンドを使用します。


xrea