理系学生日記

おまえはいつまで学生気分なのか

join コマンドの使い方

初歩的ではあるのですが、join コマンドというのは、個人的には他の人が使っているのを見たことがないレベルの不遇のコマンドです。一言で言えば、(ファイルがソートされていることを前提に) 2 つのファイルの inner join を取ることができます。

一日毎にログを取っているようなケースを想定します。ログファイルは例えば以下のようになります。

$ head 120{6,7}.dat
==> 1206.dat <==
2012/12/06 10:00 10 20 
2012/12/06 10:01 11 21
2012/12/06 10:02 12 22

==> 1207.dat <==
2012/12/07 10:00 110 220 
2012/12/07 10:01 111 221
2012/12/07 10:02 112 222

このログファイルの 3 カラム目を 12/06 と 12/07 で比較したい、みたいなときに join を使用することができます。このようなケースでは、既に時刻順にソートされている第 2 カラムを join のキーにして(-1 2 オプション + -2 2 オプション)、join コマンドを実行すれば良い。
-o は出力するカラムを指定していて、"0" は join のキー、"1.3"、"2.3" は、それぞれ 1 つ目のファイルの第 3 カラムと 2 つ目のファイルの第 3 カラムを意味しています。

$ join -1 2 -2 2 -o 0,1.3,2.3 120{6,7}.dat
10:00 10 110
10:01 11 111
10:02 12 112