テキストを行単位で重複削除し、元の順序を保つ
1 行 1 項目のテキストを貼り付けて実行すると、最初に現れた行だけが元の位置に残り、後から出てきた同じ行が削除されます。順序はそのままです。大文字小文字の無視と前後空白の無視を選べますが、空行は常に削除されます。
行単位の重複削除が向いている場面
複数のチャネルから書き出したメールリスト、キーワード表、URL 一覧を連結すると、同じ行が何度も現れます。このとき必要なのは並べ替えたユニーク一覧ではなく、最初に現れた順序を保つことです。順序自体が優先度を表しているからです。
ログの行、問い合わせ件名、SKU 一覧も同じです。数百行を目で比較するのは現実的ではなく、並べ替えると残したかった前後関係が崩れます。
- 複数の CSV の同じ列をまとめ、重複した SKU や URL を除く
- 広告チャネル、キーワード、メールアドレスの一覧を整理する
- ログや取得結果の重複行を掃除する
- 自由回答のアンケートを集約し、どんな回答があるか把握する
オプションの実際の挙動
比較は行単位の完全一致です。あいまい一致や同義語の統合は行いません。「大文字小文字を無視」を選ぶと、最初に現れた表記が残ります。「前後の空白を無視」を選ぶと、比較も出力も trim 後の文字列になるため、行頭・行末の空白やタブは結果から消えます。
空行は常に削除されます。空白だけの行は、trim を選んでいない場合に限り残ります。結果として表示されるのは残った行数と削除した重複行数だけで、各行が何回現れたか、どこにあったかは出力されません。
- 行頭のインデントを残したいなら trim を選ばない
- 大文字小文字が混在する一覧は、どちらを残すか決めてから設定する
- 回数や位置が必要なら sort | uniq -c やスクリプトを使う
- 数十万行は分割して処理する(ボトルネックは貼り付けと描画)
代替手段と限界
出現回数が必要なら sort | uniq -c かピボットテーブルを使ってください。utm パラメータだけが違う同じ URL のような近似重複をまとめたい場合は、先に正規表現やスクリプトで正規化してから重複削除します。
コードや Markdown には行単位の重複削除を使わないでください。重複した import、表の区切り行、空行には意味があり、削除するとファイルが壊れます。巨大なテキストを貼るとスクロールや選択が重くなりますが、これは描画の問題で、重複削除の処理そのものではありません。
- 回数が必要なら sort | uniq -c かピボットテーブル
- 近似重複は URL・大文字小文字・空白を正規化してから
- コードや Markdown は linter やフォーマッタで整える
よくある質問
重複削除で行の順序は変わりますか?
変わりません。先頭から順に見て、最初に現れた行をその位置に残し、後から出てきた同じ行を捨てるため、貼り付けた順序のまま出力されます。並べ替えてから重複を除く方法とは異なり、値の種類だけを知りたい場合には後者が向いています。
重複を除きつつ出現回数も知りたいのですが?
このツールは重複を除いたテキストだけを出力し、回数は数えません。回数が必要ならコマンドラインの sort | uniq -c、または Excel や Google スプレッドシートのピボットテーブルで列を集計してください。並べ替えて重複行を隣接させ、条件付き書式で確認する方法もあります。
重複削除したら行数が想定より大幅に減ったのはなぜですか?
多いのは空行の削除です。空行はすべてスキップされ、空白だけの行は trim をオフにしている場合しか残りません。次に多いのは大文字小文字の無視で、表記だけが違う行が重複扱いになります。オプションを外して再実行し、残った行数を見比べてください。
関連ツール:Remove Duplicates