2つのテキストから共通行を検索
apple、banana、cherry、banana、pearとpear、banana、orange、bananaを比べると、bananaとpearが返ります。共通行は1回ずつ1つ目の順で並び、大文字と小文字を区別しない設定もあります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト a
- apple banana cherry banana pear
- テキスト b
- pear banana orange banana
- テキスト
- banana pear
- 共通する行
- banana, pear
- 共通の数
- 2
- テキストAの行
- 5
貼り付けた2つのリストの重複部分を調べるために、表計算の数式やシェルパイプラインを用意したり、目視で慎重に確認したりする必要はありません。このツールは複数行のテキストを比較し、両方に含まれる一意の行を返します。結果は最初のテキストでの出現順になるため、予測しやすく、そのまま別の作業へ貼り付けられます。既定では完全一致で比較し、空白、句読点、大文字と小文字の違いを区別します。オプションを有効にするとAppleとappleを同じものとして扱いながら、最初のテキストの表記を維持できます。
共通行を比較する仕組み
この機能は各入力を行の並びとして扱い、2つの集合の積集合を計算します。最初に、復帰文字を含む改行を通常の改行文字へ統一します。そのため、Windowsで作成したリストとUnixで作成したリストを比べても、ファイル形式だけを原因とする誤った差は生じません。
2番目のテキストの各行を検索キーとして登録し、1番目のテキストを上から順に走査します。キーが2番目の集合に存在し、まだ出力されていない場合だけ、その行を出力します。これにより、共通する各行は1回だけ、1番目のテキストに最初に現れた順で得られます。
既定の比較は完全一致であり、先頭や末尾の空白、句読点、アクセント、大文字と小文字はすべて一致判定に影響します。空行も正当な値なので、両方にあれば結果に1回含まれます。処理は上限付きの線形走査だけで、ネットワーク、モデル、乱数、時刻を使用しません。
リストの積集合を活用できる場面
2つのシステムが1行に1つの値を出力し、その重なりを確認したい場面で共通行の抽出が役立ちます。リリース担当者は2つのデプロイに含まれるパッケージ名を比較し、共通の依存関係を確認できます。分析担当者は別々のレポートにある顧客セグメントを貼り付け、表計算ファイルのアップロードや結合処理の作成なしで、両方に存在するIDを取得できます。
コンテンツ担当者はキーワード、タグ、URLの一覧を比較しながら、最初の情報源の優先順を保てます。単語帳、出席者一覧、2時点の在庫コードの照合にも利用できます。機密性の高いデータでは、意味ではなく文字列を比較する点にご注意ください。
似たドメイン、名前、パスが同一対象かどうかは判定しません。また、空白の削除、Unicode正規化、結果の並べ替え、重複回数の集計、片方だけにある行の算出も行いません。これは、暗黙の整形によって別々であるべき値が統合されることを防ぐためです。
必要に応じて先にリストを整形し、その後で透明性の高い積集合処理としてご利用ください。配列はアプリケーションに、結合済みテキストはコピー操作に適しています。
活用例
識別子リストの比較
2つのシステムのエクスポートに共通するアカウント、商品、キーを、最初の一覧の順序を保って抽出します。
タグとキーワードの照合
共通するタグ、検索語、カテゴリを抽出し、必要に応じて大文字と小文字を区別せずに比較します。
デプロイ構成の確認
1行1項目のパッケージまたはサービス一覧を比較し、両環境に存在する一意の項目を返します。
よくある質問
共通行が繰り返し含まれる場合、複数回返りますか?
いいえ。 どちらかの入力に複数回現れても、一致した各行は1回だけ返されます。
行の前後にある空白は無視されますか?
いいえ。 空白も比較対象なので、末尾に空白がある行と、見た目が同じでも空白がない行は異なります。
共通行はどの順番で並びますか?
1つ目のテキストに最初に出てきた順で並びます。アルファベット順や2つ目のリストの順にはなりません。そのため例では、2つ目のリストでpearが先でも、bananaが先に返ります。
大文字と小文字だけが違う行も一致させられますか?
はい、大文字と小文字を区別しない設定をオンにすると、Appleとappleが一致します。結果には1つ目のテキストの表記が残るので、元の書き方は失われません。
片方のリストにしかない行も表示されますか?
いいえ、両方のテキストにある行だけを返します。どちらかに足りない行の一覧は出さず、結果の並べ替えや重複回数の集計もしません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/str/common-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text_a":"apple\nbanana\ncherry\npear","text_b":"banana\npear\norange"}'const res = await fetch("https://api.kit.forhosting.com/str/common-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/common-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/common-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text_a":"apple\\nbanana\\ncherry\\npear","text_b":"banana\\npear\\norange"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text_a":"apple\nbanana\ncherry\npear","text_b":"banana\npear\norange"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/common-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.common_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_chars_per_text | 65536 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
比較前にWindows、Unix、旧Macの改行を統一し、ブラウザーとAPIの両方で同じ決定論的な関数を使用します。
共通行を比較する仕組み
ignore_caseを有効にした場合は比較キーだけを小文字化し、返す値には1番目のテキストの元の表記を残します。同じ入力からは常に同じJSONが返ります。
入力の指定方法と結果の読み方
項目は改行で区切ります。完全一致モードは、大文字と小文字を区別するユーザー名、設定キー、ハッシュ、パス、コードなど、1文字の違いが重要なデータに適しています。集合の積を求めるため、どちらかに重複があっても出力は重複しません。比較するリストまたはテキストブロックを、空でない文字列としてtext_aとtext_bへ指定してください。各フィールドは最大65,536文字です。識別子を厳密に照合する必要がある場合は、ignore_caseを省略するかfalseにしてください。カテゴリ、商品名、タグ、ドメイン一覧などで大文字表記を区別しない場合はignore_caseを有効にします。応答には、改行で結合してすぐコピーできるtext、同じ値をJSON配列にしたcommon_lines、一意の共通行数を示すcommon_countが含まれます。さらに、正規化後の両入力の行数と、適用されたignore_caseの値も返します。順序はtext_aに基づき、text_bやアルファベット順ではありません。必須値がない、空である、文字列でない、上限を超える場合はinvalid_inputになります。APIの正常処理は1項目あたり$0.002で、ブラウザーでは同じ純粋なロジックをローカル実行します。
技術的な質問
結果の順序はどちらの入力で決まりますか?
最初のテキストで決まります。共通行はtext_aに最初に現れた順で並びます。
ignore_caseを有効にすると何が変わりますか?
小文字化したキーで比較しますが、結果にはtext_aの元の表記を残します。
APIリクエストの料金はいくらですか?
正常なAPIリクエストは1項目あたり$0.002です。Web版では同じ決定論的ロジックをローカル実行します。