LoginSignup
1
1

More than 5 years have passed since last update.

コマンドでjoin

Last updated at Posted at 2017-03-15

背景

データ量が大きく、Rなどで読み込めない
かつ、sqlのテーブルは作るのめんどくさいなあ と思ってやってみました。

やってみる

aaa.csvから、bbb.csvのなかにidが存在する行だけを抽出します。
(aaa.csvとbbb.csvをINNER JOINします)

こんなデータです

aaa.csv

name age id
tanaka 20 1
ito 16 4
yamada 31 6
sasaki 24 10

bbb.csv

id name
1 tanaka
11 kondo
6 yamada
1 tanaka
13 ishida

ソート

まず、joinコマンドを使用するためには、
joinキーがソートされている必要があります。
※aaa.csvのキーは昇順になっているので今回はパス。

csvファイルの3列目を抽出して、ユニークにしてからccc.csvに格納

cut -d "," -f "3" bbb.csv | sort | unique >ccc.csv

cut の -d オプションで区切り文字の指定(csvなので、ここではカンマ)
-f オプションで抽出する列を指定します(左から何列目か)
パイプ(|)でつないで、sortで並び替え、
パイプ(|)でつないで、重複レコードが出ないようユニークにしておきます

こんなデータになったはず
id
1
6
11
13

joinしよう

ソートが完了したのでjoinしましょう。

join -1 3 -2 1 aaa.csv ccc.csv

-1 はひとつめのデータの意味(ここではaaa.csv)の3列目
-2はふたつめのデータの意味(ここではccc.csv)の1列目

こんなデータになった
name age id
tanaka 20 1
yamada 31 6

aaa.csvとccc.csvの共通idのものだけ抽出できた!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1