by shigemk2

当面は技術的なことしか書かない

joinコマンドの怪

環境

CentOS 6.5

前置き

joinコマンドについては以下を参考に。 joinコマンドが便利過ぎて生きるのが辛い - Yuta.Kikuchiの日記

やりたいことが出来なかった

たとえば、こんな感じのファイルがあったとしましょう。

a.txt

AA 100円
BB 300円
CC 200円
DD 400円
EE 500円

b.txt

AA 100円
BB 300円
CC 200円
DD 400円
FF 703円
GG 274円
HH 999円

で、joinコマンドを使って、以下のようにファイルをくっつけたい。

$ join -a 1 -o 1.1 1.2 2.2 -e 0 a.txt b.txt
AA 100円 100円
BB 300円 300円
CC 200円 200円
DD 400円 400円
EE 500円 0
FF 0 703円
GG 0 274円
HH 0 999円

でも、こうなっちゃう。

$ join -a 1 -o 1.1 1.2 2.2 -e 0 b.txt a.txt
AA 100円 100円
BB 300円 300円
CC 200円 200円
DD 400円 400円
FF 703円 0
GG 274円 0
HH 999円 0

まあまあそうなりますよね。最初のファイルにあわせてjoinするのであって、 うまいぐあいに片方だけを0にするってのは無理です。

で、どうするか

こういうファイルを作る。

c.txt

AA
BB
CC
DD
EE
FF
GG
HH
$ join -a 1 -o 1.1 1.2 2.2 -e 0 c.txt a.txt > e.txt
$ less e.txt
$ join -a 1 -o 1.1 1.2 2.2 -e 0 d.txt b.txt > e.txt
$ less e.txt
AA 100円 100円
BB 300円 300円
CC 200円 200円
DD 400円 400円
EE 500円 0
FF 0 703円
GG 0 274円
HH 0 999円