重複行削除ツール

テキストから重複行を削除し、ユニークな行だけを保持します

サンプルを試す

入力行

ユニークな行

ローカルで実行 · シークレットの貼り付けも安全
ユニークな行がここに表示されます…

重複行削除とは?

重複行削除とは、テキストブロックを1行ずつスキャンし、各ユニーク行の最初の出現のみを保持するプロセスです。オンラインで重複行を削除する際、ツールは入力を改行文字で分割し、Set のようなハッシュベースのデータ構造を使って既出行を追跡し、初めて現れた行だけを出力します。元の行順は保持されます。

2つの行が重複と見なされるのは、文字単位で完全に一致する場合です。ただし、実際のデータが完全一致に協力してくれることはほとんどありません。先頭・末尾の空白、一貫性のない大文字・小文字の使い方、タブやキャリッジリターンなどの不可視文字により、見た目が同じでも別の行として扱われることがあります。そのため、多くの重複削除ツールでは比較前の大文字・小文字の統一と空白のトリミングのオプションが提供されています。

重複削除はソートとは異なる操作です。Unix コマンド sort -u はソートと重複削除を同時に行うため、行の順序が変わります。元の行順を保持する必要がある場合は seen-set アプローチが必要です。行を順番に反復処理し、各行の正規化した形式をセットに追加し、キーが既に存在する行はスキップします。このツールは seen-set 方式を使用するため、最初に現れた行は元の位置に留まります。

この重複削除ツールを使う理由

テキストを貼り付け、比較オプションを選択するだけで、重複を削除した結果がすぐに確認できます。コマンドラインの設定も、正規表現の記述も、ファイルのアップロードも不要です。

即時重複削除
入力または貼り付けるとすぐに結果が更新されます。大文字・小文字の区別と空白のトリミングを切り替えて、異なるオプションが出力に与える影響を再実行なしに確認できます。
🔒
プライバシー優先の処理
すべての重複削除処理は JavaScript を使ってブラウザ内で実行されます。テキストはデバイス上に留まり、サーバーに送信されることも、どこかに記録されることもありません。
🎯
設定可能なマッチング
大文字・小文字を区別しないモードを有効にすると、「Apple」と「apple」が同一行として扱われます。空白トリミングをオンにすると、比較時に先頭・末尾のスペースとタブが無視されます。
📋
アカウント不要
ページを開いてすぐに重複削除を開始できます。サインアップ、ブラウザ拡張機能、デスクトップインストールは一切不要。モダンブラウザがあればどのデバイスでも動作します。

重複行削除ツールの使用例

フロントエンド開発
CSS クラスリストの整理、重複した import 文の削除、i18n の翻訳キーの重複削除に使用できます。コミット前に重複を取り除くことで、バンドルの肥大化やマージ競合を防げます。
バックエンドエンジニアリング
ブランチのマージ後に requirements.txt、Gemfile、package.json の依存関係リストから重複エントリを削除します。許可リスト、拒否リスト、ルーティングテーブルの重複エントリを削除します。
DevOps とインフラ
.env ファイル、ホストリスト、Kubernetes ConfigMap から重複エントリを削除します。環境変数の重複はサイレントなオーバーライドを引き起こすため、デプロイ前に発見することでトレースしにくい設定バグを防げます。
QA とテスト自動化
テスト実行マニフェストから重複したテストケース ID、または生成されたテストスイートの重複アサーションを削除します。ログ出力のエラーメッセージを重複削除して、ユニークな失敗のセットを確認します。
データエンジニアリング
テキストとして貼り付けた CSV エクスポートや SQL クエリ結果から重複行を削除します。データベースやパイプラインにインポートする前に、メールリスト、ユーザー ID リスト、タグリストを整理します。
学生と学習者
語彙リスト、参考文献、学習ノートから重複エントリを削除します。複数のソースからコンテンツを貼り付けて、スプレッドシートアプリのインストールなしに重複のないクリーンなリストを取得します。

重複削除方式の比較

重複行を削除するアプローチには複数あり、行順の保持、メモリ使用量、精度のトレードオフがそれぞれ異なります。

方式仕組み出力順使用場面
SetHash-based, O(1) lookupUnorderedJavaScript Set, Python set()
Sorted + scanSort then skip adjacentSorted outputUnix sort -u, C++ std::unique
Seen-set + listTrack seen, preserve orderOriginal orderThis tool, Python dict.fromkeys()
Bloom filterProbabilistic membershipMay miss someLarge-scale pipelines, Redis
SQL DISTINCTDatabase-level dedupQuery-dependentSELECT DISTINCT col FROM table

大文字・小文字の区別と空白の処理

このツールが2行を重複と判断するかどうかは、2つのオプションによって制御されます。各オプションの使い方を理解することで、誤検知(異なる行を重複と扱う)と見落とし(一致すべき行を見逃す)の両方を防げます。

大文字・小文字を区別(デフォルト: オン)
有効の場合、「Apple」と「apple」は異なる行として扱われます。ユーザー入力データ、ドメイン名リスト、または大文字・小文字の表記が不統一でも意味が同じテキストの重複削除時はこれをオフにします。
空白のトリミング(デフォルト: オン)
有効の場合、比較前に先頭・末尾のスペースとタブが除去されます。コピー貼り付けしたターミナル出力、インデントされた設定ファイル、エディタのアーティファクトに多い、見た目は同じでも不可視文字が異なる行を検出します。

コード例

JavaScript、Python、Go、コマンドラインで重複行をプログラムで削除します。各例では行順を保持した重複削除を示し、大文字・小文字の区別に対応しています。

JavaScript
const text = `apple
banana
apple
Cherry
banana
cherry`

// Remove exact duplicates, preserve order
const unique = [...new Map(
  text.split('\n').map(line => [line, line])
).values()].join('\n')
// → "apple\nbanana\nCherry\ncherry"

// Case-insensitive deduplication
const seen = new Set()
const ciUnique = text.split('\n').filter(line => {
  const key = line.toLowerCase()
  if (seen.has(key)) return false
  seen.add(key)
  return true
}).join('\n')
// → "apple\nbanana\nCherry"

// Trim whitespace before comparing
const trimDedup = text.split('\n').filter(line => {
  const key = line.trim().toLowerCase()
  if (seen.has(key)) return false
  seen.add(key)
  return true
}).join('\n')
Python
text = """apple
banana
apple
Cherry
banana
cherry"""

lines = text.splitlines()

# Remove duplicates, preserve order (Python 3.7+)
unique = list(dict.fromkeys(lines))
# → ['apple', 'banana', 'Cherry', 'cherry']

# Case-insensitive deduplication
seen = set()
ci_unique = []
for line in lines:
    key = line.lower()
    if key not in seen:
        seen.add(key)
        ci_unique.append(line)
# → ['apple', 'banana', 'Cherry']

# With whitespace trimming
seen = set()
trimmed = []
for line in lines:
    key = line.strip().lower()
    if key not in seen:
        seen.add(key)
        trimmed.append(line)
Go
package main

import (
	"fmt"
	"strings"
)

func removeDuplicates(text string) string {
	lines := strings.Split(text, "\n")
	seen := make(map[string]bool)
	result := make([]string, 0, len(lines))

	for _, line := range lines {
		if !seen[line] {
			seen[line] = true
			result = append(result, line)
		}
	}
	return strings.Join(result, "\n")
}

func main() {
	text := "apple\nbanana\napple\ncherry\nbanana"
	fmt.Println(removeDuplicates(text))
	// → apple\nbanana\ncherry
}
CLI (bash)
# Remove duplicates (sorts output — does not preserve order)
sort -u file.txt

# Remove duplicates while preserving original order
awk '!seen[$0]++' file.txt

# Case-insensitive dedup, preserve order
awk 'BEGIN{IGNORECASE=1} !seen[tolower($0)]++' file.txt

# Trim whitespace then dedup
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' file.txt | awk '!seen[$0]++'

# Count duplicates before removing
sort file.txt | uniq -c | sort -rn

よくある質問

重複削除と sort -u の違いは何ですか?
sort -u コマンドはすべての行をアルファベット順にソートしてから隣接する重複を削除します。これにより元の行順が変わります。seen-set アプローチ(このツールが使用)は行を順番に反復処理し、既出の行をスキップすることで元の順序を保持します。ソートされたユニークな出力が必要な場合は sort -u を使用します。行順が重要な場合は seen-set アプローチを使用します。
重複を削除する際にテキストはサーバーに送信されますか?
いいえ。すべての処理は JavaScript を使ってブラウザ内で実行されます。テキストはデバイスから外に出ることはありません。ブラウザの DevTools ネットワークタブを開き、テキストを貼り付けてオプションを切り替えた際にリクエストが発生しないことで確認できます。
このツールは何行まで処理できますか?
数万行でも問題なく動作します。JavaScript の Set は平均 O(1) の検索時間を持つため、現代のハードウェアでは 10 万行の重複削除が 100 ミリ秒以内に完了します。数メガバイトを超えるファイルには、ファイル全体をメモリに読み込まずにストリーム処理する awk '!seen[$0]++' のコマンドラインワンライナーを使用してください。
大文字・小文字を区別しない重複削除はどのように動作しますか?
大文字・小文字の区別がオフの場合、各行は既出行のセットと照合する前に小文字に変換されます。出力には最初に現れた行の元のケースが保持されます。たとえば入力の1行目に「Apple」、5行目に「apple」がある場合、「Apple」が保持され「apple」が削除されます。
重複削除とソートを同時に行うことはできますか?
このツールは行順を変えずに重複を削除します。ソートされたユニークな出力を得るには、同じカテゴリの行ソートツールでテキストをソートしてから、ソート済みの結果をここに貼り付けて残りの重複を削除してください。または、コマンドラインで sort -u を使えば一度で解決できます。
空行や空白のみの行はどのように処理されますか?
空行は他の行と同様に扱われます。テキストに空行が3行ある場合、最初の1行だけが保持されます。空白トリミングがオンの場合、スペースやタブのみの行は比較前に空文字列に正規化されるため、すべて最初の空行または空白のみの行の重複として扱われます。
CSV ファイルの特定の列で重複を削除するには?
このツールは列ではなく行全体を比較します。特定の列で CSV の重複を削除するには、フィールドセパレータ付きの awk を使用します: awk -F',' '!seen[$2]++' file.csv は2列目に重複する値を持つ行を削除します。Python では pandas を使用します: df.drop_duplicates(subset=['column_name'])。SQL データでは対象列に SELECT DISTINCT または GROUP BY を使用します。