読者です 読者をやめる 読者になる 読者になる

くんすとの備忘録

プログラミングや環境設定の覚え書き。

uniqコマンドを使って、論理和・論理積・排他的論理和・差集合を得る方法

シェルスクリプト FreeBSD シェル芸

タイトルの通り、UNIXの「uniq」コマンドを使って、2つのファイルから

を取得する方法を示します。

方法

前提:入力ファイル

確認のため、以下のような、ファイルa・bを使用します。

% cat a
1
2
3
4

% cat b
3
4
5
6

論理和(OR)

ファイルa・bをコンカチ・ソートしたものに対し、uniqコマンドを、特にオプションを付けずに実行すると、論理和を取得できます。

% cat a b | sort | uniq
1
2
3
4
5
6

論理積(AND)

ファイルa・bをコンカチ・ソートしたものに対し、uniqコマンドを 「-d」オプション付きで実行すると、論理積を取得できます。

% cat a b | sort | uniq -d
3
4

排他的論理和(XOR)

ファイルa・bをコンカチ・ソートしたものに対し、uniqコマンドを 「-u」オプションを付きで実行すると、排他的論理和を取得できます。

% cat a b | sort | uniq -u
1
2
5
6

差集合(A-B)

a・bの和集合とbの排他的論理和を取ることで、差集合(a-b)を取得することができます。
ここまでの応用です。

% (cat a b | sort -u; cat b) | sort | uniq -u
1
2

※sort | uniq は sort -u で代用できます

差集合(B-A)

上記と同様に、a・bの和集合とaの排他的論理和を取ることで、差集合(b-a)を取得することができます。

% (cat a b | sort -u;cat a) | sort | uniq -u
5
6


以上。

広告