ファイル内の重複した行を削除する「uniqコマンド」

uniqコマンドで重複した行を削除・表示する

Linuxのuniqコマンドを利用すると、重複した行を削除したり、重複している行のみ表示できます。
uniq コマンドではオプションなしでは、重複している行を削除できますが「ソート」しないと重複行を削除できません。

下記のようにフルーツ名を入力したファイルがあります

$ cat fruits.txt
melon
strawberry
cherry
melon
apple
pear
banana
cherry
pineapple
cherry
melon

uniqコマンドで使ってみますが、ソートしてないので重複行が削除されなません
$ uniq fruits.txt 
melon
strawberry
cherry
melon
apple
pear
banana
cherry
pineapple
cherry
melon

「sort 」コマンドを通してから、「uniq」コマンドを実行してみると、きちんと重複行が削除され表示されます
$ sort fruits.txt | uniq
apple
banana
cherry
melon
pear
pineapple
strawberry

ファイルをソートする

下記のように、sort [ ファイル名 ]でソートしてからパイプで繋いで「uniq」に繋げればソートされ重複行が削除されます

書式:sort  [ ファイル名 ] | uniq

また、下記のように sort [ファイル名]を実行してからその結果をファイルに書き出してソート済みのファイルとしてもソートできます

$ sort fruits.txt > fruits_sort.txt
$ cat fruits_sort.txt
apple
banana
cherry
cherry
cherry
melon
melon
melon
pear
pineapple
strawberry

重複行のみ出力する

uniq -d [ファイル名] と「-d」のオプションを使用すると、重複している行のみ出力できます

$ uniq -d fruits_sort.txt
cherry
melon

重複していない行のみ出力する

uniq -u [ファイル名] と「-u」のオプションを使用すると、重複していない行のみ出力できます

$ uniq -u fruits_sort.txt
apple
banana
pear
pineapple
strawberry

大文字・小文字を無視して重複行を削除する

大文字・小文字を区別しないで、重複行が削除する場合は「-i」のオプションを利用します。
但しこの場合もソート時に大文字・小文字を区別しないでソートする必要があります。その場合は、sort -f [ファイル名] と「-f」のオプションを使用します

$ cat fruits2.txt
banana
strawberry
Banana
kiwi fruit
strawberry
kiwi fruit
Kiwi Fruit
strawberry

# 大文字・小文字を区別しないで重複行を削除する場合
$ sort -f fruits2.txt | uniq -i
Banana
Kiwi Fruit
strawberry

 

 

スポンサーリンク