文字去重

移除重複行,保留唯一內容

把好幾份名單合在一起之後,最麻煩的不是找出重複,而是「去掉重複但別打亂順序」——排序法(sort | uniq、試算表的排序後刪除)會把原本的先後關係一起洗掉。這個工具以行為單位比對,只保留每個值第一次出現的位置,比對在你的瀏覽器裡完成,名單不會被送出。

使用步驟

  1. 把一行一筆的清單貼進左邊的「輸入」框。右邊的「輸出」框即時更新,不必按執行。
  2. 需要時勾選上方兩個選項:「忽略大小寫」讓 Alice@x.com 與 alice@x.com 視為同一筆;「忽略前後空白」讓行首行尾多出來的空格不影響判定。兩個都不勾就是逐字元完全相符才算重複。
  3. 有東西被移除時,輸出框下方會出現一行「已移除 N 行重複內容」;沒有重複時這一行不會出現。
  4. 用右下角的「複製」帶走結果,左下角的「清空」倒空輸入框。

什麼時候用得上

合併多份 email 名單再寄送

活動報名表、電子報訂閱、業務手上的名片,三份匯出疊在一起必然有人重複收信。把 email 那一欄整個貼進來,勾「忽略大小寫」(網域部分本來就不分大小寫),就能得到一份不重複又保持原順序的名單——最早報名的人仍然排在前面。

整理關鍵字與否定關鍵字清單

做 SEO 或投放廣告時,關鍵字通常是從好幾個工具匯出再拼成一份,重複的字詞上傳到廣告後台還可能被判為錯誤。這裡一次挑掉重複,剩下的字順序不變,方便照原本的優先度由上往下審。

從日誌裡看錯誤總共有幾種

幾千行的錯誤訊息,真正不同的往往只有五、六種。把訊息欄貼進來去重,剩下的行數就是問題的種類數。要注意含時間戳記的行每一行都不一樣,去重前得先把時間戳記切掉。

限制與注意事項

  • 比對規則是整行完全相同。行內的重複不會被處理,蘋果,蘋果,香蕉 對它來說就是獨一無二的一行;逗號或分號分隔的清單要先換成一行一筆再貼進來。
  • 空行與只有空白字元的行一律被移除,這個行為是固定的,畫面上沒有開關可以保留它們。如果你的資料靠空行分組(例如通訊錄的每筆之間空一行),跑完之後分組會消失。而「已移除 N 行重複內容」只計算因重複而丟掉的行,被清掉的空行不算在裡面,所以這個數字通常小於輸入與輸出的行數差。
  • 勾了「忽略前後空白」時,比對用的是修剪後的值,但輸出保留第一次出現那一行的原樣,包含它原本的縮排。同理,勾了「忽略大小寫」時輸出保留第一次出現的寫法,先出現 TAIPEI 就留 TAIPEI。
  • 比對是逐字元的,不做 Unicode 正規化,也不把全形與半形視為相同:abc 和 abc 是兩筆,組合式與預組式的重音字母也是兩筆。遇到這類資料,先用全半形轉換統一格式再回來去重。
  • 這個工具不排序、不統計每個值出現幾次,也沒有「只顯示重複的那些行」的模式。整個過程由這個分頁的程式碼在你的裝置上執行,名單不會被上傳;頁面本身會載入廣告等第三方資源,那些請求不包含你貼進來的資料。

常見問題

「已移除 N 行」和我自己數的行數差不一樣,是算錯了嗎?

不是。舉例來說,一份 10 行的資料裡有 2 行重複、3 行是空行,輸出會剩 5 行,提示卻寫「已移除 2 行」,因為空行不列入那個計數。想確認總共少了幾行,把輸入與輸出分別貼到字數統計工具看行數會比較直接。

會幫我排序嗎?

不會,而且這是刻意的。命令列的 sort -u 與試算表的「移除重複項目」多半會順帶重排,但很多清單的順序本身就有意義——報名先後、優先度、原始檔案的段落結構。真需要排序,去重之後再交給試算表。

空行為什麼被吃掉了?我想留著當分隔。

目前沒有保留空行的選項,程式在比對之前就會把它們濾掉,否則第二個空行會被當成第一個空行的重複,行為反而更難預期。如果空行對你的資料有結構上的意義,先用一個不會出現在資料裡的記號(例如 ---)取代空行,去重完再換回來。

名單會被上傳嗎?裡面有客戶的 email。

不會。去重的邏輯就在這個分頁載入的 JavaScript 裡,讀取輸入框、比對、寫回輸出框,整條路徑都在你的裝置上,斷網也照樣運作。要補充的是,這個頁面本身會載入廣告等第三方資源,那些連線傳的是頁面資訊,不含你的清單內容。