○○○=△△△ みたいな書式の2つのテキストa.txtとb.txtを○○○をキーにして1つにまとめたい。
どっちか片方にしかないものも出力して、両方にあるものはa.txtにあるほうを優先する。
join -t= -a1 -a2 a.txt b.txt | perl -ne 'print "$1\n" if(/^([^=]*+=[^=\n]*)/)' > c.txt
ただし、a.txtとb.txtはソートしておく必要がある。
perlで
cat b.txt a.txt | perl -ne 'if(/^([^=]+)=([^=\r\n]*)/){ $a{$1}=$2; }; END{ while(($k,$v)=each %a){ print "$k=$v\n";} }' > c.txt
あらかじめソートしとかなくていい分、こっちの方が楽で便利だ。
-t | 区切り文字。-t= なら = で区切る |
-a1 | 1番目のファイル(a.txt)にしかないものも出力する |
-a2 | 2番目のファイル(b.txt)にしかないものも出力する |
優先したい方(この場合a.txt)を先に書く
a.txtとb.txtは、それぞれ昇順にソートしておく。
これで、出力されるのは
a.txt A=333 B=222
b.txt A=111 C=444
のとき
A=333=111 B=222 C=444
になる。○○○=1番目の△△△=2番目の△△△
ということで、これをperl使って整形し、後ろをちょん切る。