- 追加された行はこの色です。
- 削除された行はこの色です。
* joinコマンド [#y6030929]
CSVファイルのようにセパレータを持つデータファイルが2つある時、(互いに共通な)キーを使って、2つのファイルをマージする。SQLのテーブルジョインのような事をするコマンド。
** 前提 [#mea07de6]
- A.csv
A.csv:
1,ONE
2,TWO
3,THREE
4,FOUR
- B.csv
1,one
3,three
2,two
B.csv:
one,1
three,3
two,2
1,2,3,4が結合キー。
** 使い方 [#cf91adcc]
''注意:キーはソートをかけておくこと!!''
***最初に、 [#de2c0770]
sort +1 -t , B.csv > C.csv
キーはソートをかけておくこと!
*** -1 と -2 で 1番目のファイル、2番目のファイルの結合キーのカラム番号を指定 [#j8c11b8c]
join -t ',' -1 1 -2 1 A.csv B.csv
*** 単純なJOIN [#p4f0d946]
join -t , -1 1 -2 2 A.csv C.csv
1,ONE,one
2,TWO
2,TWO,two
3,THREE,three
4,FOUR
*** -a で片方のファイルにない行も表示(SQLのUNION結合) [#j6ca196c]
join -t ',' -a 1 -1 1 -2 1 A.csv B.csv
- -1 と -2 で 1番目のファイル、2番目のファイルの結合キーのカラム番号を指定する。
- -tでセパレータを指定する。
*** LEFT OUTER JOIN(片方のファイルにない行も表示する) [#xbca7022]
join -t , -a 1 -1 1 -2 2 A.csv C.csv
1,ONE,one
2,TWO
2,TWO,two
3,THREE,three
4,FOUR
*** 他にもオプションはあるが、 [#v4ce61e8]
- -aオプションを指定する。
** 他にもオプションはあるが、 [#v4ce61e8]
Perlでやった方がわかりやすそう。
** その他 [#ib3dc2ea]
パッケージ:coreutils