joinコマンドの出力をタブ区切りに
joinというUNIXコマンドは、2つのファイルの同じ値のある行をjoinして、一行にまとめてくれるコマンド。
join -j 1 file1 file2
でタブ区切りテキストのfile1とfile2の一番左側のカラムの値が同じ行が結合されて出力される。
このコマンドのやってくれる事自体は大変便利なのであるが、デフォルトではその後の出力はスペース区切りとなり、ちょっと不便だった。これをタブ区切りに変えるやり方を知ったので、こちらにも転記しておく。
join -j 1 -t "$(printf '\011')" file1 file2
結合する前のファイルはsortされていないといけない。そうなっていないと
join: file1:7: is not sorted
というエラーが出る。
sort -u file1 > file1s
sort -u file2 > file2s
のようにsortしたファイルで処理するようにする。-uオプションを付けることでsortしたうえに重複した行も除くように。
あとjoinするのに用いるword(キー)もユニークでなくてはならない。すなわち、二回以上出てきてはダメ。実は今日やっていたのはこちらの制約に引っかかり、結局joinコマンドでは無理ということで、しかたがなくPerlでスクリプトをかくという別の手段に。現実世界はなかなか大変。