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 コマンドを使用します。