データ抽出時のuniqコマンド一覧
データ抽出の作業している時、uniqコマンドについてたまに分からなくなるけど、これを見れば大丈夫!
ついでに、uniqコマンドだけでなくcommコマンドも併記してみました。
サンプルテキスト
以下の2つのファイルを例に説明します。
A.txt
A
B
C
D
E
B.txt
B
D
X
Y
Z
A ANDNOT B
「AというマスターのリストからBに含まれているものを除外する」というケース。
uniq
% sort {A,B,B}.txt | uniq -u > C.txt
実行例
% sort {A,B,B}.txt | uniq -u
A
C
E
comm
% comm -23 <(sort -u A.txt) <(sort -u B.txt) > C.txt
実行例
% comm -23 <(sort -u A.txt) <(sort -u B.txt)
A
C
E
B ANDNOT A
上記の「A ANDNOT B」のケースで「BにあるデータはAにも絶対に含まれているはず」という前提の時、
念のため「XやYやZのような異分子が存在するかどうか」を確認するケース。
uniq
% sort {A,A,B}.txt | uniq -u > C.txt
実行例
% sort {A,A,B}.txt | uniq -u
X
Y
Z
comm
% comm -13 <(sort -u A.txt) <(sort -u B.txt) > C.txt
実行例
% comm -13 <(sort -u A.txt) <(sort -u B.txt)
X
Y
Z
A AND B
「AとBどちらにも含まれているものを抽出する」というケース。
uniq
% sort {A,B}.txt | uniq -d > C.txt
実行例
% sort {A,B}.txt | uniq -d
B
D
comm
% comm -12 <(sort -u A.txt) <(sort -u B.txt) > C.txt
実行例
% comm -12 <(sort -u A.txt) <(sort -u B.txt)
B
D
A OR B
「AとBどちらかに含まれているものを全て抽出する」というケース。
uniq
% sort {A,B}.txt | uniq > C.txt
実行例
% sort {A,B}.txt | uniq
A
B
C
D
E
X
Y
Z
comm
% comm <(sort -u A.txt) <(sort -u B.txt) | tr -d '\t' > C.txt
実行例
% comm <(sort -u A.txt) <(sort -u B.txt) | tr -d '\t'
A
B
C
D
E
X
Y
Z
A XOR B
排他的論理和。
「AとBどちらにも含まれているものだけ除外する」というケース。
uniq
% sort {A,B}.txt | uniq -u > C.txt
実行例
% sort {A,B}.txt | uniq -u
A
C
E
X
Y
Z
comm
% comm -3 <(sort -u A.txt) <(sort -u B.txt) | tr -d '\t' > C.txt
実行例
% comm -3 <(sort -u A.txt) <(sort -u B.txt) | tr -d '\t'
A
C
E
X
Y
Z