commコマンドは2つのファイルを行単位で単純比較します. 単純比較なので事前ソートが必須です.
#サンプル用ファイル1 $ cat text1.txt 1 2 3 4hoge 5 #サンプル用ファイル2 $ cat text2.txt 1 2foo 3 4 5
上記2ファイルに対して実行すると
$ comm text1.txt text2.txt 1 2 2foo 3 4 4hoge 5
結果が3列に分けて表示される.
列番 | 内容 |
---|---|
1 | file1の内容のみにあるもの |
2 | file2の内容のみにあるもの |
3 | 両方のファイルにあるもの |
オプション
毎回3列出されても鬱陶しい時は抑制オプションがある.
オプション | 内容 |
---|---|
-1 | file1の内容のみにあるものは出さない |
-2 | file2の内容のみにあるものは出さない |
-3 | 両方のファイルにあるものは出さない |
例
$ comm -1 text1.txt text2.txt 1 2foo 3 4 5 $ comm -2 text1.txt text2.txt 1 2 3 4hoge 5 $ comm -3 text1.txt text2.txt 2 2foo 4 4hoge
ちなみに冒頭に書いた通り,単純比較なのでファイルの末尾に改行コードが入っているとソートされていないとみなして下記のような警告を吐いてきます.
comm: ファイル 1 がソートされていません comm: ファイル 2 がソートされていません
その他の指定
引数に'-'(ハイフン)を渡すと標準入力からの入力になります. (第一,第二どちらでも指定可能)
$ cat text2.txt | comm text1.txt - 1 2 2foo 3 4 4hoge 5 $ cat text1.txt | comm - text2.txt 1 2 2foo 3 4 4hoge 5
中々使えそうなコマンドです.