【comm】bash/シェルスクリプトマニアックコマンドあれこれ10

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」オプションは、「表示しない列」を指定します。

書籍の紹介

【nl】bash/シェルスクリプトマニアックコマンドあれこれ11

【nl】bash/シェルスクリプトマニアックコマンドあれこれ11

【shuf】bash/シェルスクリプトマニアックコマンドあれこれ9

【shuf】bash/シェルスクリプトマニアックコマンドあれこれ9