commコマンド
comm
コマンドは、テキストファイルを比較するコマンドです。
comm ファイル1 ファイル2
で2つのテキストファイルを比較し、ファイル1だけにある行、ファイル2だけにある行、共通している行を出力します。
比較するファイルはソートされている必要があります。
- ヒント
- 比較するファイルはソートされている必要があるんです!
使い方
まずは1つ目のファイル
$ cat words.txt
Apple
Banana
Orange
India
US
Canada
そして2つ目のファイル
$ cat countries.txt
India
US
Canada
Japan
$ comm <(sort words.txt | uniq) <(sort countries.txt | uniq)
Apple
Banana
Canada
India
Japan
Orange
US
$
- ヒント
- <と(の間は空白などを含めてはいけません。
インデントで3つの区分が見えますね。
1つ目のインデント列は、1つ目のファイルにだけあるもの、
2つ目のインデント列は、2つ目のファイルにだけあるもの、
3つ目のインデント列は、両方のファイルにあるもの
です。
共通している行だけを表示する
「-1」「-2」「-3」オプションで、「表示しない列」を指定できます。
オプション | 説明 |
---|---|
-1 | 1列目(ファイル1のみに含まれる行)を出力しない |
-2 | 2列目(ファイル2のみに含まれる行)を出力しない |
-3 | 3列目(両方のファイルに含まれる行)を出力しない |
2列目と3列目を表示しないようにします。
1列目だけを表示、要するに1列目にだけあるものを表示します。
$ comm -23 <(sort words.txt | uniq) <(sort countries.txt | uniq)
Apple
Banana
Orange
1列目と3列目を表示しないようにします。
2列目だけを表示、要するに2つ目のファイルにだけあるものを表示します。
$ comm -13 <(sort words.txt | uniq) <(sort countries.txt | uniq)
Japan
$
両方のファイルにある項目を表示
1列目と2列目を表示しないようにします。
3列目だけを表示、要するに両方のファイルに存在するものを表示します。
$ comm -12 <(sort words.txt | uniq) <(sort countries.txt | uniq)
Canada
India
US
$
- ヒント
- 「-1」「-2」「-3」オプションは、「表示しない列」を指定します。