ファイル内のユニークな(重複のない)文字列を取得する(sort, uniq)

ファイル内から重複する行を削除し、ユニークな文字列のみを取得するには、sort コマンドと uniq コマンドを組み合わせて利用します。

uniq コマンドは「直前の行と連続して重複している行」を1行にまとめる性質があります。
そのため、あらかじめ sort コマンドで同じ文字列の行を並び替えてから uniq コマンドに渡すことで、
ファイル全体の重複を完全に排除することができます。

■目次


スポンサーリンク

コマンドの基本構文と実行例

以下は、data.txt というファイルから重複を除いたユニークな行を取得する例です。 実務ではどちらの方法もよく使われますが、通常はパイプ(|)が1つで済む1番目の方法がシンプルで推奨されます。

1. 最もスマートな方法(sort -u) 推奨

sort コマンドの -u(unique)オプションを使うと、ソートと重複排除を1つのコマンドだけで同時に実行できます。
パイプ(|)を使わないため、最も処理が高速でスマートな書き方です。

 sort -u data.txt

2. パイプで繋ぐ標準的な方法

一度 sort で並び替えた結果を、パイプを介して uniq に渡す方法です。

 sort data.txt | uniq

3. catでファイルを開いてから渡す方法

 cat data.txt | sort | uniq

※動作は同じですが、無駄なコマンド(cat)やパイプが増えるため、大きなファイルを処理する際は上記の「1」や「2」の方法が推奨されます。

(応用)結果を別ファイルに保存したい場合

リダイレクト(>)を使って、重複を排除した結果を新しいファイル(result.txt)に保存できます。

sort -u data.txt > result.txt

実行結果の例

元となるデータファイル(data.txt)の中身と、コマンドを実行した結果の比較です。

元データ(data.txt)の中身

$ cat data.txt 
RED
GREEN
BLUE
RED
RED
PINK
YELLOW
GRAY
GREEN
YELLOW
BLUE

コマンド実行結果(アルファベット順にソートされ、重複が消える)

$ sort -u data.txt
BLUE
GRAY
GREEN
PINK
RED
YELLOW

サマリー(まとめ)

最後に

Linuxのテキスト処理において、sort と uniq の組み合わせは、ログファイルの解析やデータのクレンジングなど、実務のあらゆる場面で頻出する最も基本かつ強力なテクニックの一つです。
最初はパイプ(|)を使った組み合わせに戸惑うかもしれませんが、それぞれのコマンドの役割(「並び替える」と「連続した重複を消す」)を意識すると、仕組みがすんなりと理解できるようになります。
この基本をマスターすれば、大規模なデータから必要な情報だけを瞬時に抽出できるようになり、作業効率が劇的にアップします。ぜひコマンドを実際に叩いて、その便利さを体感してみてください!


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2026-06-07 (日) 15:24:37