commが便利

かなり小ネタ。

GNU coreutilsに、join,sort,uniq...などなどかなりの便利なものが含まれているのだが、commというかなり便利なものが含まれているのが見逃せない。
これはソート済みの2つのテキストファイルの集合演算をするようなもので、対称差と差集合を出す、みたいな用途に使える。
具体的にはAとBを受取って、

  • AだけにあってBにないもの
  • BだけにあってAにないもの
  • AとBに共通して存在するもの

を出すことができる。diffなんかでもいいのだが、commのいいところはそれぞれをタブ区切りの行として出力してくれること。たとえば「会員ID」とか「ファイル名のリスト」とか、シンボルの羅列みたいな2ファイルを食わせて出てきたものをExcelにぶちこんでそのまま「こっちにだけあるヤツはこれだ」とかいうのが直感的に解る。

coreutilsってぐらいで当たり前なツールかもしれないが、場合によってかなり便利なのでメモ。調査とかで cat 色々 | sort | uniq -c とかする人にはいいツールになるかも?

$ cat a
a
b
c
d
$ cat b
b
d
e
f
$ comm a b 
a
                b
c
                d
        e
        f
$ comm -1 -2 a b
b
d