更新履歴
- 【Git】複数のコミットを一つにまとめる|squash/fixupで履歴を整える
- ダックタイピングとは?「アヒルのように鳴くならアヒル」をわかりやすく解説
- crontabファイルの場所はどこ?OS別の保存先パスと確認・編集方法を徹底解説
- 【pytest】特定のテストだけを実行する方法!ファイル・クラス・関数ごとに解説
- TeraTermのセッションが勝手に切れる原因と対策|タイムアウトを防ぐ設定ガイド
- WinMergeをインストール不要で使う!ポータブル版の導入手順とメリットを解説
- 【完全ガイド】WinMergeでバイナリ比較をする方法
- SwaggerとOpenAPIの違いを徹底解説!仕様とツールの関係性を理解する
- 【Python】ファイル存在チェックの実装方法(pathlib、os.path)
- Pythonで文字列を除去する方法を完全解説!strip・replace・正規表現
- スタック領域とヒープ領域の違いとは?メモリ管理から使い分けまで徹底解説
- Python Docstringの書き方完全ガイド|主要スタイルの比較と保守性を高める記述
- シングルトン(Singleton)デザインパターンを徹底解説!Java実装例・メリット・デメリット
- サインインとログインの違いとは?意味・使い分けをわかりやすく解説
- 静的サイトと動的サイトの違いを徹底比較!メリット・デメリットと選び方を解説
- モノリスとマイクロサービスの違いを比較|メリット・デメリットと選定基準
- RESTとSOAPの違いを徹底比較!特徴・メリット・使い分けを解説
- 同期・非同期とブロッキング・ノンブロッキングの違い|4つの概念を徹底比較
- マルチプロセスとマルチスレッドの違いを解説!メリット・デメリット・使い分け
- hostsファイルとDNSの違いとは?優先順位・仕組み・使い分けを解説
お役立ちツール
この記事は役に立ちましたか?
Linuxユーザにお勧めの本
Linuxでは、ログファイルや大量データの整形作業を行う際に、「重複行を削除したい」というニーズが多く発生します。特に、アクセスログ・CSVデータ・設定ファイルなどで重複行が混在していると、正確な分析や集計ができなくなります。
本記事では、sort、uniqなどの定番コマンドを使って、重複行を削除するための方法を丁寧に解説します。それぞれのコマンドの特徴や使いどころ、応用例もあわせて紹介するので、業務でデータを扱う方にも役立つ内容です。
記事のポイント
- Linuxでの重複行削除は
sortとuniqコマンドの組み合わせが基本。uniqは隣接する重複しか認識しないため、事前のソートが必須。-c(集計)、-d(重複抽出)、-u(ユニーク抽出)など分析に便利なオプションも豊富。- awkやcutと組み合わせることで、ログ解析やCSV整形など実務にも応用可能。
Linuxで重複行を削除する基本(sort+uniq)
Linuxで重複行を削除する際によく使われるのが、sortとuniqコマンドです。これらはどのディストリビューションにも標準で搭載されており、シェルスクリプトからも簡単に利用できます。これらを理解することで、ExcelやPythonスクリプトを使わなくても、端末上で簡単にデータクレンジングを行えるようになります。
sort:ファイルをソート(並び替え)するコマンド。文字コード順や数値順など、さまざまな基準で並び替え可能。uniq:連続して現れる重複行を削除、または分析するためのコマンド。
この2つを組み合わせることで、シンプルながら非強力な重複行削除が実現できます。例えば、ログファイルの中で同じリクエストURLを1回だけ残したい場合などに便利です。
sortとuniqを組み合わせた基本的な削除方法
最も基本的かつ確実な方法が、以下のようにsortとuniqを組み合わせる方法です。
sort ファイル名.txt | uniq > 出力ファイル名.txtこのコマンドは、ファイルの内容をソートしたうえで、uniqで隣接する重複行を削除します。uniqは連続している同一行のみを比較するコマンドです。
そのため、離れた場所にある重複行を削除する場合は、事前にsortで並び替える必要があります。
例として、以下のようなファイルを考えます。
applebananaappleorangebananaAppleこの場合、
sort sample.txt | uniq > result.txtを実行すると、result.txtには以下の結果が出力されます。
Appleapplebananaorangeファイル内の重複行を簡単に取り除けることがわかります。また、sort -uを使えば、uniqを省略して同じ結果を得ることもできます。
-uオプションはソートと同時に重複行を削除する機能を持っています。
sort -u sample.txt > result.txtそのため、結果としては次のコマンドと同等になります。
sort sample.txt | uniquniqコマンドを用いた重複行の抽出・分析
uniqは単なる重複削除ツールではなく、重複の「可視化」や「分析」にも利用できます。以下に代表的なオプションを目的別に紹介します。
重複している行の出現回数をカウントする(-c)
sort sample.txt | uniq -c出力例:
1 Apple 2 apple 2 banana 1 orange行の左側に出現回数が表示されるため、どのデータが重複しているかを一目で把握できます。
重複している行だけを抽出する(-d)
sort sample.txt | uniq -d出力例:
applebanana同じ内容が2回以上現れる行だけを抽出します。
重複していないユニークな行だけを抽出する(-u)
sort sample.txt | uniq -u出力例:
Appleorange重複していないユニークなデータだけを抽出する際に有用です。
大文字・小文字を区別せずに比較する(-i)
sort -f sample.txt | uniq -i出力例:
Applebananaorangeなお、sortだけで処理する場合は以下のように書くこともできます。
sort -fu sample.txt-fは大文字小文字を区別せずにソートするオプションです。また uniq -i は比較時に大文字小文字を無視します。そのため、大文字小文字を無視した重複削除を行う場合はsort -f と uniq -i を組み合わせる必要があります。
こうしたオプションを組み合わせると、単なる削除ではなく「重複データの検出」や「集計」も効率的に行えます。
実務で役立つLinuxでの重複行削除の応用例
実際のエンジニアの現場では、単なるテキストファイルの重複削除だけでなく、ログファイルやCSVデータの特定の列に対して処理を行うケースがよくあります。
アクセスログから重複IPアドレスを削除・集計する
ApacheやNginxのアクセスログなどから、アクセス元のIPアドレス(例:ログの1列目)だけを抽出し、アクセスの多い順にランキング表示するようなケースです。
awk '{print $1}' access.log | sort | uniq -c | sort -nr出力例:
150 192.168.1.10 85 192.168.1.25 12 10.0.0.5awkでIPアドレスの列だけを切り出し、sortとuniq -cで出現回数をカウント後、さらにsort -nr(数値として降順ソート)することで、アクセスの多いIPを簡単に特定できます。
CSVファイルから特定列を切り出して重複削除する
CSVデータの特定列(例えば2列目のメールアドレスなど)だけを取り出して一意なリストを作りたい場合は、cutコマンドと組み合わせます。
cut -d ',' -f 2 users.csv | sort | uniq > unique_emails.txt※この方法はシンプルなCSV(カンマ区切りのみ) を前提としています。
引用符付きCSV(例:"John, Jr.")などの複雑な形式では、awkやCSV専用ツールを使う方が安全です。
awkを使ったソートしない重複削除(おすすめ)
実務上で「元の行の順序を保持したまま」重複行を削除したい場合は、awkを使用する以下のワンライナーが非常によく使われます。
awk '!seen[$0]++' sample.txt※補足:
seen[$0]++は、行全体($0)をキーとして出現回数を配列に記録し、初めて出現した行(カウントが0のとき)だけを出力するawkの定番イディオムです。
このコマンドの特徴は以下の通りです。
- ソートせずに重複削除が可能
- 元ファイルの順序を保持できる
例として以下のようなデータがあったとします。
applebananaappleorange実行後(出力例):
applebananaorangeuniqやsortでは行の並び順が変わってしまいますが、この書き方であれば順序を維持できます。アクセスログの解析や時系列データなど、発生順序が重要な場面で非常によく使われるプロのテクニックとして覚えておきましょう。
Linux重複行削除まとめ
Linuxで重複行を削除する際は、用途やデータの性質に応じて以下のように使い分けましょう。
- 重複削除:
sort ファイル | uniqまたはsort -u - 分析・可視化用途:
uniq -c(出現回数のカウント)、uniq -d(重複行のみ抽出)、uniq -u(ユニークな行のみ抽出)
sort、uniqはいずれも軽量かつ高速に動作するテキスト処理コマンドです。ログ解析やデータ前処理など、日常的な業務におけるデータ整理を効率化する上で欠かせないツールといえるでしょう。
なお、uniqは隣接する行のみを比較する仕様のため、ファイル全体の重複を削除する場合は sort と組み合わせて使用するのが一般的です。
あわせて読みたい
ログ解析やデータ抽出の作業では、grepコマンドによる特定文字列の検索も頻繁に行われます。複数ファイルから対象行を再帰的に検索したい場合は、以下の記事もぜひ参考にしてみてください。

【Linux】grepコマンドで再帰的な検索をする方法
Linuxでファイル内容の再帰的な検索をする場合は、grepコマンドのrオプションを利用します。またlオプションと組み合わせることで、該当ファイルの一覧も取得することができます。
Linuxユーザにお勧めの本
以上で本記事の解説を終わります。
よいITライフを!