重複行を削除
apple、banana、apple、cherry、bananaはapple、banana、cherryになり、重複した2行を削除して3行を最初に出てきた順に残します。Appleとappleを同じ行として扱うこともできます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- apple banana apple cherry banana
- テキスト
- apple banana cherry
- 元のテキスト
- apple banana apple cherry banana
- 元の行数
- 5
- ユニーク行数
- 3
重複行はログ、メーリングリスト、プレーンテキストとして書き出したCSV列、シェル履歴、二度貼り付けたコード片、同じ箇条が複数回コピーされたメモアプリなどに入り込みます。手作業での整理は遅く誤りやすく、大文字小文字の違いが真の重複を隠す場合や、順序が重要で最後ではなく最初の出現を残す必要がある場合は特にそうです。本ツールは入力した複数行テキストを行に分割し、最初の出現順を保った決定的な重複排除済み文字列を返します。大文字小文字を無視するオプションもあり、Apple と apple を同一行として扱い、最初に書いた表記を保持します。
重複行の消え方と大文字小文字の設定
エンジンはキャリッジリターン様式を正規化し、Windows の CRLF と単独 CR を通常の改行区切りに揃えたうえで、各改行で文字列を分割します。意図的な空行を含む各結果行が候補になります。ある行が初めて現れたときは元の文字のまま保持され、比較キーに一致する以降の行は捨てられます。
既定では比較は厳密で、空白・句読点・大文字小文字がすべて意味を持ち、末尾空白や Apple と apple は別行です。連絡先リストやタグのダンプをタイトルを書き換えずに整えるときの一般的な期待に合います。削除行数とユニーク行数は整形済みテキストと一緒に返り、ダッシュボードやテストが変化量を検証できます。
経路は文字列上の純粋な parse 演算 — 見たキー用のハッシュ集合を伴う1回の線形走査 — のため、典型的なフォームサイズではレイテンシはミリ秒未満に保たれ、公開コストモデルはモデルトークンではなく解析的です。
ファジー一致、編集距離のしきい値、意味的埋め込みの段階はなく、それらはテキストとして等しくないが似た行向けの意味的CSV重複排除など別ツールの領域です。
実務で重複行削除が現れる場面
ログ断片やシェル履歴ダンプを整える開発者は、チケットやバグ報告に貼る前に最初の出現順のユニークリストが必要です。1列をプレーンテキストで書き出すデータチームは、表計算を開いたり使い捨て awk を書かずにユニーク値が欲しいことがよくあります。
タグ一覧・カテゴリ名・用語集項目をまとめる編集者は、大文字小文字を無視するモードで表記ゆれをまとめつつ好みの最初の表記を残します。学生と教師はコピー&ペーストによる偶発的な繰り返しなしに語彙リストや解答キーの行集合を用意します。QAエンジニアは、アルファベット順より最初の発見順が重要な URL・メール・製品SKUのフィクスチャを維持します。
システム管理者は複数ソースのブロックリストと許可リストをマージし、以前の信頼できる項目を並べ替えない決定的なユニーク集合を必要とします。列キー付きの行単位CSV重複排除、ほぼ重複行のファジー意味マージ、重複画像のバイナリハッシュが後から必要なら、この重複行削除ページに詰め込まず別の検索意図とランディングとして扱ってください。
活用例
ログと履歴の断片を整理
複数行ログやシェル履歴を貼り付け、各行の最初の出現を残してチケットや報告を短く保ち、順序は失いません。
タグと語彙のユニーク一覧
繰り返すタグや用語集の行をまとめ、必要なら大文字小文字を無視し、最初の好みの表記を保ちます。
エクスポート列をテキストとして正規化
1列のプレーンテキストダンプを、表計算を開かずにフィクスチャ・ブロックリスト・QA用のユニーク行一覧にします。
よくある質問
重複行はどのように検出されますか?
CRLFを正規化した後、改行でテキストを分割します。最初の出現が残り、以降の一致は捨てられます。
空行は保持されますか?
はい。 空行は有効な行値です。最初の空行が残り、追加の空行はその空行の重複として扱われます。
テキストが空の場合はどうなりますか?
空でない文字列を指定してください。空欄はクライアントエラーとして扱われ、課金されません。
重複した行はどれが残りますか?
常に最初の1行が残ります。後から出てくる同じ行は削除され、残った行は最初に出てきた順のままなので、リストの上のほうの項目の位置は変わりません。
Appleとappleは重複として扱われますか?
大文字と小文字を区別しない設定をオンにした場合だけ重複として扱い、最初に書かれた表記を残します。初期設定では完全一致で比べ、行末の空白の違いも区別します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/str/dedupe-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"apple\nbanana\napple\ncherry\nbanana"}'const res = await fetch("https://api.kit.forhosting.com/str/dedupe-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "apple\nbanana\napple\ncherry\nbanana"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/dedupe-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "apple\nbanana\napple\ncherry\nbanana"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/dedupe-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"apple\\nbanana\\napple\\ncherry\\nbanana"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"apple\nbanana\napple\ncherry\nbanana"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/dedupe-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "apple\nbanana\napple\ncherry\nbanana"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.dedupe_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
空入力は黙って空結果を返すのではなく明確な検証エラーで拒否し、フィールドのバインド漏れからクライアントを守ります。
行の重複排除の仕組みと ignore_case の意味
ignore_case が true のときは所属キーが行の Unicode 小文字形になり、保持される文字列はあなたが与えた最初の表記のままです。文書化された文字数上限を超える極端に長いペイロードは invalid_input で失敗し、1リクエストが Worker メモリを独占しないようにします。
送信内容と返却内容
テキスト本体として使われた数値と真偽値は十進または true/false のテキスト形に強制変換され、オブジェクト、配列、NaN、Infinity は拒否されます。空テキストは集合を作る前に検証で失敗し課金されません。ログやリストの貼り付け整形には無料ブラウザフォームを使い、夜間エクスポート・CIフィクスチャ・モデレーション待ち行列の正規化ではスクリプトから同一契約を呼び出してください。必須フィールド text に、整形したい空でない複数行文字列を送ってください。古いクライアント向けに input、value、data、s、message、string、content、body などの別名も受け付けます。任意で ignore_case を真偽値、または true、false、yes、no、one、zero といった一般的な文字列形で送れます。成功時の応答は、重複排除後の文字列 text、エコーとデバッグ用の入力 original、original_lines、unique_lines、removed_lines、解決済み ignore_case フラグ、operation が dedupe_lines に設定された形です。定番チェックには、banana と apple が繰り返される果物リストが3ユニーク行に潰れる例、ignore_case が true のときさらに潰れる大小混在リスト、removed_lines が0のまま通る単一ユニーク行などがあります。成功したAPI呼び出しの料金は公開ベースの $0.002 毎件で、空テキストを含む検証失敗はプリペイド残高を消費しません。
実務で重複行削除が現れる場面
本能力は純粋な parse エンジンのため、API料金は成功1件あたり公開ベース $0.002 で、失敗した検証は残高を消費しません。
技術的な質問
ignore_case は保持する表記を変えますか?
いいえ。比較キーだけが小文字化されます。保持される行テキストは、常にあなたが与えた最初の元の表記です。
料金はいくらですか?
ブラウザツールは無料でローカル実行です。APIリクエストは成功1件あたり $0.002 のプリペイドKIT残高を使い、無効な入力は課金されません。