uniq コマンドは、重複行を削除するためのコマンドです。入力されたデータに含まれる連続した重複行を取り除き、ユニークな行を表示します。GNU coreutils に含まれており、Linux では GNU 版が、FreeBSD では BSD 版が提供されています。基本的な動作は共通していますが、細かなオプションの違いがあります。

基本的な使い方

編集
uniq [オプション] 入力ファイル 出力ファイル

主なオプション(GNU coreutils版)

編集
主なオプション
オプション 説明
-c, --count 各行の出現回数を表示
-d, --duplicates 重複行のみ表示
-u, --unique ユニークな行のみ表示
-i, --ignore-case 大文字と小文字を区別しない
-f, --skip-fields=N 最初のNフィールドを無視
-s, --skip-chars=N 最初のN文字を無視
-w, --check-chars=N 最初のN文字だけを比較

重複行を削除

編集
uniq file.txt

file.txt の連続する重複行を削除。

重複行の出現回数を表示

編集
uniq -c file.txt

各行の出現回数を表示しながら重複行を削除。

重複行のみ表示

編集
uniq -d file.txt

重複行のみを表示。

ユニークな行のみ表示

編集
uniq -u file.txt

ユニークな行のみを表示。

大文字と小文字を区別しないで重複行を削除

編集
uniq -i file.txt

大文字と小文字を区別せずに重複行を削除。

最初のNフィールドを無視して重複行を削除

編集
uniq -f 2 file.txt

最初の2フィールドを無視して重複行を削除。

最初のN文字を無視して重複行を削除

編集
uniq -s 3 file.txt

最初の3文字を無視して重複行を削除。

最初のN文字だけを比較して重複行を削除

編集
uniq -w 5 file.txt

最初の5文字を比較して重複行を削除。

FreeBSD 版との違い

編集

FreeBSD でも uniq コマンドは提供されていますが、GNU coreutils 版といくつか違いがあります。

主な違い:

編集
  1. -w(最初のN文字比較)オプションが FreeBSD にはない
    • FreeBSD 版の uniq には、-w オプションがないため、指定した文字数を比較することができません。
  2. -f(フィールドを無視)オプションの挙動が異なる
    • FreeBSD 版の uniq では、-f オプションの挙動が GNU 版とわずかに異なる場合があります。
  3. GNU coreutils 版を FreeBSD で使う方法
    • coreutils パッケージをインストールすると guniq という名前で GNU 版 uniq が使える。
    pkg install coreutils
    guniq file.txt  # GNU coreutils 版の uniq
    

詳しくは、それぞれの環境で man uniq を確認してください。