• 追加された行はこの色です。
  • 削除された行はこの色です。
* 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



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS