コマンドラインで複数のCSVファイルをマージする方法

joinコマンドを使用し、ワンライナーで複数のCSVファイルをマージ結合する方法です。数万件でもすぐに終わります。

入力ファイル - file1.csv(名前とplace_id)、file2.csv(GPS座標)、file3.csv(レイティングの値)

$ cat file1.csv
seq,name,place_id
1,北海道神宮,ChIJrRCK4NwpC18RHtS3xF5mfN0
2,函館八幡宮,ChIJsUFEhvzynl8RFPK9IvNnRPc
3,住吉神社,ChIJTc06SryRQTURcUiuXMWgyBI
4,上川神社,ChIJkeCsOyTmDF8RMUXkml0jGl0
5,帯廣神社,ChIJv4_zty-Zc18RXD3fuwaVvBI
6,樽前山神社,
$ cat file2.csv
seq,lat,lng
1,43.0542729,141.3076588
2,41.753878,140.7102986
3,33.5859053,130.4137035
4,43.7523043,142.3647392
5,42.9307739,143.2093402
6,42.660886,141.604108
$ cat file3.csv
seq,rating
1,4.4
2,3.7
3,4.3
6,3.9

コマンドと出力結果

$ join -j1 -t, -a1 file1.csv file2.csv | join -j1 -t, -a1 - file3.csv
seq,name,place_id,lat,lng,rating
1,北海道神宮,ChIJrRCK4NwpC18RHtS3xF5mfN0,43.0542729,141.3076588,4.4
2,函館八幡宮,ChIJsUFEhvzynl8RFPK9IvNnRPc,41.753878,140.7102986,3.7
3,住吉神社,ChIJTc06SryRQTURcUiuXMWgyBI,33.5859053,130.4137035,4.3
4,上川神社,ChIJkeCsOyTmDF8RMUXkml0jGl0,43.7523043,142.3647392,
5,帯廣神社,ChIJv4_zty-Zc18RXD3fuwaVvBI,42.9307739,143.2093402,
6,樽前山神社,,42.660886,141.604108,3.9

入力ファイルのseqフィールドをキーにマージしています。各ファイルはキーとなるフィールドでソートされていることが前提です。

-j1:1つ目のフィールドをキーに結合。

-a1:ファイル1のマッチしないレコードも出力。

 

csvjoin未検証。