UNIX系OSの join コマンドのメモ
2023-01-29-1
[Programming]
説明用のメモ。
ファイルは事前にソートされていることが必須。
詳しくは "man join" で。
ファイルは事前にソートされていることが必須。
詳しくは "man join" で。
- サンプルファイル: a1, a2
a 11 b 12 c 13 d 14 e 15 f 16 g 17
b 21 c 22 e 23 g 24 x 25 y 25 z 27
- INNER JOIN : それぞれのファイルの第1カラムをキーにJOIN
join -1 1 -2 1 -t' ' a1 a2 b 12 21 c 13 22 e 15 23 g 17 24
- LEFT JOIN (-a)
join -a 1 -1 1 -2 1 -t' ' a1 a2 a 11 b 12 21 c 13 22 d 14 e 15 23 f 16 g 17 24
- RIGHT JOIN
join -a 2 -1 1 -2 1 -t' ' a1 a2 b 12 21 c 13 22 e 15 23 g 17 24 x 25 y 25 z 27
- OUTER JOIN
join -a 1 -a 2 -1 1 -2 1 -t' ' a1 a2 a 11 b 12 21 c 13 22 d 14 e 15 23 f 16 g 17 24 x 25 y 25 z 27
- 片方にしかないやつを出す (-v)
join -v 1 -j 1 -t' ' a1 a2 a 11 d 14 f 16
join -v 1 -v 2 -j 1 -t' ' a1 a2 a 11 d 14 f 16 x 25 y 25 z 27
- サンプル2 (カラム追加): a11, a12
a 11 1 b 12 c 13 1 e 15
b 21 1 c 22 1 e 23 z 27
- 出力カラムの選択
join -o 0 -1 1 -2 1 -t' ' a11 a22 b c e
join -o "0,2.2,1.2" -1 1 -2 1 -t' ' a11 a22 b 21 12 c 22 13 e 23 15
join -a 1 -a 2 -o 0 1.3 2.3 1.2 2.2 -1 1 -2 1 -t' ' a11 a22 a 1 11 b 1 12 21 c 1 1 13 22 e 15 23 z 27
- 空のときに出す文字列を指定 (-e)
join -e 'N/A' -a 1 -a 2 -o 0 1.3 2.3 1.2 2.2 -1 1 -2 1 -t' ' a11 a22 a 1 N/A 11 N/A b N/A 1 12 21 c 1 1 13 22 e N/A N/A 15 23 z N/A N/A N/A 27
join -e 0 -o 0 1.3 2.3 -1 1 -2 1 -t' ' a11 a22 b 0 1 c 1 1 e 0 0
- 両方のファイルで同じカラムを使うとき (-j)
join -e 0 -o 0 1.3 2.3 -j 1 -t' ' a11 a22 b 0 1 c 1 1 e 0 0
- カラム指定 (-1, -2, -j) はそもそも第1カラムを使うときは省略可
join -t' ' a1 a2 join -e 0 -o 0 1.3 2.3 -t' ' a11 a22
- 区切り文字指定 (-t): デフォルトはスペース(タブ含む)
join -j 1 -t$'\t' a.tsv b.tsv join -j 1 -t, a.csv b.csv