0
Words
0
Characters
0
No spaces
0
Lines
0
Paragraphs
0
Sentences
0 min
Reading time
Lines with duplicates
Deduped output

重複行を削除:テキストをオンラインで重複排除

任意のリストを貼り付けて、完全一致の重複を取り除き、順序を保持するか結果を並べ替えます。大文字小文字と空白のトグル付き。

このツールの機能

1つのテキストブロックから重複行を削除する、ブラウザ内で動く無料のユーティリティです。入力を貼り付け、元の順序を保つか出力を並べ替えるかを選ぶと、重複は消えます。何もマシンの外には出ません。

コマンドラインの sort -u、または元の順序で最初の出現を保ちたいときの awk '!seen[$0]++' のGUI版です。sort | uniq を実行するためだけに4,000行のメールエクスポートをターミナルに貼り付けたことがあるなら、これはターミナルなしの同じものです。

重複排除は完全一致で行単位です。重複としてカウントするには、2つの行が文字単位で一致する必要があります(大文字小文字とトリムのトグルに従います)。あいまい一致、近似重複検出、類似度スコアリングは意図的に対象外です。別の問題には別のツールを。

重複排除の実際の仕組み

内部的には、ツールは各行を一度だけ走査し、見たことのある値をハッシュベースの集合で追跡します。これはJavaScriptの Set やPythonの set と同じデータ構造です。検索は平均O(1)なので、普通のノートPCで100万行が1秒未満で処理されます。基盤となるアルゴリズムは単純な hash table のメンバーシップ判定です。

モードは2つ。順序を保持 は各行の最初の出現を保ち、後の重複をすべて捨てます。awk '!seen[$0]++' と同じ動作です。並べ替えて重複排除 はまず入力全体をアルファベット順に並べ替え、各ユニーク行を一度だけ出力します。sort -u と同じ動作です。下流の利用者が期待する方を選んでください。

比較自体にもトグルがあります。大文字小文字を区別しない[email protected][email protected] を同じ行として扱います。空白をトリム は比較前に先頭と末尾のスペースとタブを取り除くので、" example""example ""example" は1つのエントリにまとまります。両方ともデフォルトはオフです。安全な動作は、入力されたものに正確に一致させることだからです。

3ステップで重複行を削除する方法

入力ペイン1つ、出力ペイン1つ。何もアップロードされません。

  1. 1

    行を貼り付ける

    入力ペインにテキストを入れます。任意のリストが使えます:メール、IP、URL、SKU、ログのタイムスタンプ、パッケージ名、1行に1項目ならなんでも。先に結果を見たいなら、Sample をクリックして意図的に重複を含むサンプルを読み込めます。

  2. 2

    オプションを選ぶ

    順序を保持(最初の出現を保つ。awk '!seen[$0]++' のように)か 並べ替えて重複排除(アルファベット順。sort -u のように)を選びます。Alicealice をまとめたい場合は 大文字小文字を区別しない を、先頭や末尾のスペースを無視したい場合は 空白をトリム をオンにしてください。

  3. 3

    結果をコピーまたはダウンロード

    右ペインに重複排除後の出力と削除された行数のカウントが表示されます。Copy をクリックして取得するか、Download をクリックして .txt ファイルとして保存します。両ペインは独立してスクロールするので、どの行が消えたか確認できます。

このツールが欲しくなるとき

インポート前にマーケティング用メールリストを整理

あるCRMからリストをエクスポートし、ウェビナー登録からのものを差し込み、両方をツールに貼り付け、大文字小文字を区別しない空白をトリム をオンにして重複排除します。MailchimpやHubSpotはどのみちインポート時に重複アドレスを拒否しますが、重複だけでなくバッチ全体を拒否するので、先にこれをやっておけば再アップロードを節約できます。

監査ログ内のIPアドレスを重複排除

auth.log の1週間分から awk でソースIPを取り出し、貼り付けて、順序保持モードで重複排除します。「誰が最初に現れたか」というおおまかな時系列のシグナルを失わずに、ユニークな攻撃者のクリーンなリストが得られます。これをファイアウォールのブロックリストに投入してください。

複数ページから収集したURLリストの整理

サイトマップとページネーション付きインデックスをスクレイピングすると、同じURLが複数回返ってきます。結合したリストを入れて並べ替えて重複排除すれば、正規のクロールフロンティアができます。末尾スラッシュやクエリ文字列はまだ別の行として扱われるので、まとめたいならまず正規化してください。

pip freezeやnpm lsのノイズをユニークなパッケージに減らす

2つのvirtualenvをまたいだ pip freeze、またはmonorepoでの npm ls --all は、同じパッケージを多くの行に印字します。連結し、貼り付け、重複排除すれば、name==version ごとに1行になり、実際にインストールされているものを素早く目視確認できます。

複数ソースから貼り付けたCSV行

行レベルの重複排除に有効で、各行が自己完結したレコードのときに通常必要なのはこれです。注意:これはプレーンテキストの重複排除であり、列を意識したものではありません。引用符付きカンマを尊重し列順を無視する真の行レベル重複排除が必要なら、本物のCSVツールを使ってください。スプレッドシートから貼り付けるほとんどのケースでは、行重複排除で十分です。

コピーした参考文献や引用リストの整理

ブラウザの3つのタブから1つのドキュメントに参考文献をコピーすると、同じDOIが4回繰り返されます。貼り付け、空白をトリム をオンにし(PDFからのコピペは余計な空白を入れがちなので)、重複排除すれば、きれいな参考文献セクションができます。アルファベット順の参考文献リストには並べ替えモードが便利です。

重複排除のクイックリファレンス

テキストを重複排除するときに最も頻繁に噛みつくエッジケース。出力を信頼する前に一度目を通す価値があります。

TopicWhat this tool does
順序の保持順序保持は最初の出現を保ち、後の重複を捨てます。awk '!seen[$0]++' やPythonの list(dict.fromkeys(lines)) のように。並べ替えモードはアルファベット順で、sort -u のようになります。
大文字小文字の区別デフォルトはオフ。大文字小文字を区別しない がオンでない限り、Alicealice は別物です。メールやユーザー名のリストは通常オンを望みます。SKUリストは通常望みません。
空白のトリムデフォルトはオフ。空白をトリム がオンになるまで、" example""example ""example" は3つの異なる行です。内部の空白には決して触れません。
空行通常の行値として扱われます:空文字列。重複排除がオンの場合、入力に空行があれば1つだけ残ります。すべての空行を取り除くには、別の空白クリーニング手順を使ってください。
行末(CRLF対LF)末尾の \r が分割後も残る場合、\r\n で終わる行は \n で終わる行と技術的に異なります。私たちは \r?\n で分割するので、混在する行末はまとまります。幽霊重複が見える場合、入力に行の途中に余計な \r 文字が含まれています。
Unicode正規化視覚的に同一の2つの文字列は、一方がNFCで他方がNFD(合成済みアクセント対分解アクセント)の場合、不等として比較されることがあります。このツールは正規化を行いません。疑わしい場合は、まず両方の入力を String.prototype.normalize('NFC') またはPythonの unicodedata.normalize でNFCに正規化してください。
入力末尾の改行\n で終わるファイルには幻の最終空行があります。ほとんどのエディタはそれを隠します。私たちはそれを1つの空行として扱い、他の空行と一緒に重複排除します。出力は慣例として末尾に改行を1つ保ちます。
エンコーディング全体を通じてUTF-8。貼り付け時にデコードはブラウザが処理します。バイトがもともとLatin-1またはWindows-1252だった場合、重複排除が走る前にすでにASCII外の文字が壊れている可能性があります。エンコーディングは上流で変換してください。

重複行を削除:よくある質問

元の順序を保持しますか、それとも出力を並べ替えますか?

両方、お選びいただけます。順序を保持 は各行の最初の出現を保ち、後の重複をすべて捨てるので、出力はおおよそ入力と同じ順序で読めます。並べ替えて重複排除 は結果全体をアルファベット順に並べ替えます。順序が意味を持つとき(時系列ログ、ランキング付きリスト)は順序保持を、ただクリーンなユニーク集合が必要なときは並べ替えを選んでください。

比較は大文字小文字を区別しますか?

デフォルトでは区別します。それが安全な前提だからです。大文字小文字を区別しない をオンにしない限り、Alicealice は別の行です。ほとんどのメールシステムはローカル部分のアドレスを大文字小文字を区別しないものとして扱うので、メールリストではほぼ常にこのトグルをオンにしたいでしょう。大文字小文字を区別しないプラットフォームのユーザー名も同様です。本当に大文字小文字を区別するSKUや識別子では、オフのままにしてください。

先頭と末尾の空白を無視できますか?

はい、空白をトリム でできます。比較前に先頭と末尾のスペースとタブを取り除くので、" example ""example ""example" はすべて1つのエントリにまとまります。入力が手で編集されたり、PDFからコピペされたりしている場合に便利です。どちらも余計な空白を残します。行内部の空白には触れません。

Unixの uniq コマンドとどう違いますか?

uniq コマンドは 隣接する 重複だけをまとめます。これはよくある驚きです。別の行で隔てられた2つの同一行はどちらも uniq を生き残ります。だからUnixのイディオムは sort | uniq または sort -u なのです:重複が隣り合うように、まず並べ替える必要があります。このツールは並べ替えられた入力を必要としません。見たことのある行をすべてハッシュ集合で追跡しながら進むからです。

各行の重複数をカウントしますか?

いいえ、それは別の機能です。カウントが必要なら、Unixのコマンドはソートの後の uniq -c です:sort input.txt | uniq -c | sort -rn はカウントで並べ替えられた頻度表を出します。これは最も多いエントリを見つけたいときに欲しいものです。このツールはクリーンアップに焦点を当てており、分析ではありません。

どのくらいの大きさの入力を貼り付けられますか?

数百万行は問題ありません。重複排除自体はO(n)で定数時間のハッシュ検索なので、ボトルネックは重複排除ではなく、結果ペインをレンダリングするブラウザです。非常に大きな入力(50MB以上)では、テキストエリアが再描画されるときに目に見える間が出ます。入力がそれほど大きいなら、ほぼ確実にすでに sort -u が手元にあるはずなので、それを使ってください。

プライバシーと仕組み

あなたのテキストはブラウザを離れません。重複排除はあなたのマシン上で、ローカルに、JavaScriptのSetに対して実行されます。入力に対するアナリティクスはなく、ログもなく、クラウドへの往復もありません。ツール全体はわずか数行のコードです:改行で分割し、走査し、まだ見ていないものを保つ。背後にある標準ライブラリのプリミティブは MDNのSetリファレンス と、対応する Pythonのset ドキュメント に文書化されています。