Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【shell】joinコマンドでファイルを連結する

前回に引き続き、ファイル連結コマンドメモその2。 joinコマンド を使って、ファイルをRDBのテーブルのように結合する。

環境

OS : Mac OSX
shell : zsh

cmd

# ファイルその1
$ cat user.csv 
1,taro
2,jiro
3,saburo
4.siro

# ファイルその2
$ cat job.csv 
1,engineer
2,programmer
3,teacher
5,mechanic

# 内部結合(-tオプションで区切り文字指定)
$ join -t, user.csv job.csv
1,taro,engineer
2,jiro,programmer
3,saburo,teacher

# -1 オプションで一番目の結合用ファイル列番号を指定
# -2 オプションで二番目の結合用ファイル列番号を指定
$ join -t, -1 1 -2 1 user.csv job.csv
1,taro,engineer
2,jiro,programmer
3,saburo,teacher

# 内部結合なので、列が一つも一致しないと何も表示されない
$ join -t, -1 1 -2 2 user.csv job.csv

# 外部結合(-a オプションで、外部結合の主テーブルを決定)
$ join -t, -a 1 -1 1 -2 1 user.csv job.csv
1,taro,engineer
2,jiro,programmer
3,saburo,teacher
4,siro

$ join -t, -a 2 -1 1 -2 1 user.csv job.csv
1,taro,engineer
2,jiro,programmer
3,saburo,teacher
5,mechanic

# -o オプションで出力フォーマットを指定
# 0 はキー列
# 1.1は一番目ファイルの一列目
# 2.1 は二番目ファイルの一列目
$ join -t, -a 2 -1 1 -2 1 -o '0 1.2 2.2' user.csv job.csv
1,taro,engineer
2,jiro,programmer
3,saburo,teacher
5,,mechanic

# -e オプションで空白文字のプレースホルダ指定
$ join -t, -a 2 -1 1 -2 1 -o '0 1.2 2.2' -e 'none' user.csv job.csv
1,taro,engineer
2,jiro,programmer
3,saburo,teacher
5,none,mechanic