commコマンドすごい
とか感動してたら
とリプライをもらって、commってなんだあ?と思ったので調べて使ってみました。
環境:Ubuntu 10.10 64bit / comm ver.8.5 (GNU coreutils)
とリプライをもらって、commってなんだあ?と思ったので調べて使ってみました。
環境:Ubuntu 10.10 64bit / comm ver.8.5 (GNU coreutils)
commって?
2つのファイル(このうち片方は標準入力にできる)を比較して、一致する行、片方のファイルにのみ存在する行を出力するコマンドです。(前提としてソートされていること)
使い方と出力
$ cat <<EOB > aaa aaa bbb ccc ddd eee EOB $ cat <<EOB > bbb ccc eee xxx zzz EOB $ comm aaa bbb # "$ cat aaa | comm - bbb" でもOK
2つのファイルを引数に渡します。
すると出力が以下のようになります。
aaa bbb ccc ddd eee fff xxx zzz
一番左がaaaにしか存在しない行、中央がbbbにしか存在しない行、一番右が2つのファイルに存在する行です。
commへのパラメータとして-1を渡すと一番左のみ出力しない、-2を渡すと中央のみ出力しない、-3で一番右のみ出力しない、となります。
ちなみにタブ区切りなので標準出力をtsvとして出力するとすごく幸せになれると思います。
trでコンマに変換してcsvでもいいかも。
まさに突き合わせをするシェルスクリプトを書こうと思っていた矢先に教えてもらってよかった!