
テキスト行をオンラインで並び替え・重複削除する方法(ExcelやスクリプトなしでOK)
📷 Pixabay / Pexelsテキスト行をオンラインで並び替え・重複削除する方法(ExcelやスクリプトなしでOK)
テキストのリストを素早く並び替え、重複削除、反転、クリーンアップする方法を解説。スプレッドシートもターミナルも不要。開発者やデータ処理者向けの実践例。
開発者やデータ担当者が常に対面している特定のたいくつさがあります:ドメイン、ユーザー名、タグ、URL、エラーメッセージのリストがあって、それを並び替えたいか、重複を消したいか、あるいは両方したいという状況です。シンプルに聞こえます。実際シンプルです。でも、Excelを開いたり、簡単なPythonスクリプトを書いたり、bashで正確なsort | uniqの呪文を思い出すというその手間が、作業を遅らせるには十分です。
私はこのようなタスクに思いのほか時間を失ってきました。時間単位ではありませんが、集中を断ち切るあの煩わしい2分間の中断です。そのユースケースのために行ソートツールは作られました — リストを貼り付けて、並び替えて、クリーニングして、コピーして、次へ進む。
よくあるケース
このようなツールが実際に時間を節約する状況を見ていきましょう。
URLまたはドメインのリストから重複を削除する
ブロックするドメインのリスト、リダイレクトルールのリスト、コンテンツセキュリティポリシーの許可リストを作成しているとします。異なるソースからURLを貼り付けると重複が生じます。
- Excelを開いて、貼り付けて、重複の削除を使う
- ターミナルで
sort -u list.txt > sorted.txtと書く - awkやPythonを使う
または、行ソートに貼り付けて「重複を削除」にチェックを入れ、10秒で終わらせることができます。
ターミナルアプローチは、すでにターミナルにいる場合は正直なところよりクリーンです。でもドキュメントを書いている、フォームを記入している、ブラウザで作業しているという別の作業の最中には、ターミナルに切り替えて1行のコマンドを実行するのは見た目以上のオーバーヘッドがあります。
タグリストやキーワードをアルファベット順に並べる
SEOキーワード。データベースの列名。環境変数名。設定キー。これらは最初に書く時にはアルファベット順に並んでいないリストですが、アルファベット順に読む方が見やすいものです。
手作業でのアルファベット順並び替えは5アイテムなら機能します。15アイテムになると目がスキップし始めます。50アイテムになるとツールが必要です。
ランダム順に並び替える(シャッフル)
逆にソートではなく、リストをランダム化したい時もあります。ランダム順のテストデータ、シャッフルされたアンケートの質問、テキストとしてエクスポートされたランダム化されたプレイリストなど。シャッフルオプションがこれを処理します。
ソートせずに反転する
最も古いエントリが最初にある変更履歴がある場合、表示用に最新のものを最初にしたいかもしれません。逆順(逆アルファベットではなく、単に順序を反転)は、逆方向のソートとは異なります。どちらの操作も利用可能です。
実際に重要なオプション
行ソートには理解する価値のあるいくつかのオプションがあります。
大文字小文字を区別する: 大文字小文字の区別なし(デフォルト)では、「Apple」と「apple」は同じようにグループ化され、重複としてカウントされます。有効にすると、異なる値として扱われます。プログラミングのユースケース(環境変数名、コマンド名)には大文字小文字を区別するオプションが通常適しています。人名や地名などの人間のテキストには、大文字小文字を区別しない方が通常適しています。
重複を削除: 他の操作と組み合わせて機能します。ソートと重複削除を同時に行えば、クリーンで重複なしのアルファベット順リストが得られます。
空白行を削除: ドキュメントから何かを貼り付けると、しばしばその中に散らばった空白行が入ってきます。これを削除します。
ホワイトスペースをトリムする: 各行の先頭と末尾のスペースを処理します。スプレッドシートやPDFからコピーすると見えないところに現れる種類のもの。「apple 」と「apple」は同じ文字列ではありませんが、トリムを有効にすれば同じになるので、重複が正しく検出されます。
実際のワークフロー:データベース移行チェックリストのクリーニング
私が実際に使った具体的なワークフローを紹介します。複数人が時間をかけてメンテナンスしてきたデータベース移行チェックリストがありました。アイテムは追加・再追加され、中には少しホワイトスペースや大文字小文字が異なるものもあり、リストは200件以上に増えていました。
クリーンアップするには:
- リスト全体をクリップボードにコピー
- 行ソートに貼り付け
- 有効にする: ホワイトスペースをトリム、空白行を削除、重複を削除
- A → Zでソート(目で類似重複を見つけやすくなる)
- 結果をコピー
ソートされ重複が削除された出力は140件に減りました。類似重複(「Usersテーブルを移行する」対「usersテーブルを移行する」)はまだ人間の目が必要でしたが、明らかな完全一致の重複はなくなりました。
その後、ソートされたリストをテキスト差分ツールで前のバージョンと比較して、正当なものが削除されていないか確認しました。その2ツールのワークフローは合計で5分ほどかかりました。
ターミナルを代わりに使うべき時
正直なところ:ターミナルに慣れているなら、ファイルに対してはsort -u filename.txtの方が速いです。スクリプトの一部として処理するなら、コードで行うべきです。
オンラインツールの方が優れているのは:
- すでにブラウザのコンテキストにいる時
- クリップボードにあるテキストを処理していて、ファイルではない時
- 複数のオプション(ソート + 重複削除 + トリム)をコマンドをチェーンせずに一度に適用したい時
- 作業しているのが開発者でない場合
最後のポイントが重要です。リストを重複削除する必要があるすべての人がターミナルの開き方を知っているわけではありません。コンテンツマネージャー、マーケティング担当者、プロジェクトマネージャー — 彼らも同じ必要性があり、awk '{!seen[$0]++} !seen[$0]'が何をするかを知る必要のないツールに値します。
多言語ソート
見落とされがちな一つの点:非英語テキストのソートはASCIIテキストのソートとは同じではありません。
bashのsortはUTF-8でそれなりの仕事をしますが、ロケールを正しく設定する必要があります(LC_ALL=ja_JP.UTF-8 sortなど)。アクセント付きの文字(é、ü、ñ)はロケールによって異なる順序でソートされます。韓国語、日本語、中国語は完全に異なる照合ルールを持っています — 韓国語ハングルはUnicodeコードポイントではなく音声順でソートされます。
行ソートはソートにJavaScriptのlocaleCompare()メソッドを使用しており、ブラウザのロケール設定を尊重します。つまり、日本語のリストは日本語で正しくソートされ、ドイツ語のウムラウトはベース母音に対して正しい位置にソートされます。
完璧ではありません — ロケール対応のソートは深い問題ですが、実際の多言語コンテンツに対するナイーブな文字コード順よりも大幅に優れています。
できないこと
期待値を設定するために:
ファジーマッチの重複は検出しません。 大文字小文字の区別なしで「東京」と「Tokyo」がある場合、それらは一致しません。ファジー重複削除にはより洗練されたものが必要です。
列のソートはできません。 これは行レベルのツールです。カンマ区切りの値があって2番目の列でソートしたい場合は、CSVツールまたはスプレッドシートが必要です。
発生回数のカウントや値によるグループ化はできません。 ただしテキスト分析がより豊富に必要な場合は、ワードカウンターを確認してください。
プライバシー
すべてはあなたのブラウザで実行されます。あなたのテキストはサーバーに送信されません。これは、重複削除しているリストにメール、内部ドメイン名、顧客データ、その他の機密コンテンツが含まれている場合に重要です。
ワークフローへの統合
実用的なノート:
キーボードドリブンな使用: キーボード派なら、フローは:入力でCtrl+Aで全選択、Ctrl+Vで貼り付け、TabとSpaceでオプション調整、処理をクリック。出力にはコピーボタンがあります。
大きな入力: ツールは典型的なサイズの大きな入力(数百から数千行)をうまく処理します。本当に巨大な入力(数百万行)には、コマンドラインツールの方が速いでしょう。
ラウンドトリッピング: ある操作の出力を別の操作の入力として使用しても構いません。ソートして、コピーして、貼り付け直して、異なるオプションを適用して、繰り返す。ツールは操作間に記憶がありません。
まとめ
行ソーターは自分のツールを必要とするにはシンプルすぎるように聞こえます。でも「ツールを必要とするにはシンプルすぎる」はしばしば摩擦が最も目に見えない形で蓄積するカテゴリーです。1日に20回行う5秒のタスク。
テキストリストをここで並び替え、重複削除、クリーンアップしてください。 セットアップなし、サインアップなし、ランダムなサーバーへの貼り付け懸念なし。
より構造化されたものを扱っている場合は、変更前後のリストのバージョン比較にテキスト差分ツールが適しています。そしてワードカウンターは、ソートされた出力以上のものが必要な場合にテキストの統計を提供します。