Xóa dòng trùng trong list & CSV | Tool text trên trình duyệt (không cần Set)
List / CSV / keyword → tool text, không phải new Set(). Chuẩn 1 dòng = 1 mục, bật trim (Excel hay thừa space), với email cân nhắc không phân biệt hoa thường. Xóa trùng lặp chạy trên trình duyệt, giữ lần xuất hiện đầu, không upload server. Cần dedupe mảng trong code JS → xem Xóa trùng mảng JavaScript.
Ticket 17:00: “Lọc trùng 3.200 email từ form đăng ký sự kiện.” Bạn không muốn mở Node, không muốn gửi file lên random “dedupe online”, và Excel “Remove Duplicates” trên máy lab trường đôi khi bị khóa macro. Đó là lúc cần tool text: dán → unique → copy.
Bài javascript-array-deduplicate đã cover Set / Map / NaN. Bài này không dạy thuật toán — dạy quy trình làm sạch dòng văn bản (email, URL, SKU, username Zalo/Telegram group export) trước khi import CRM hoặc crawler.
Bài viết này giúp bạn
- Chuẩn bị list từ Sheets / CSV / Notepad đúng format
- Biết bật trim và ignore case khi nào
- Tránh sai khi dedupe cả hàng CSV thay vì một cột
- Phân biệt ops text vs Set trong code
- Checklist trước khi ghi đè file khách
Vì sao list text hay “trùng giả”?
Ba nguồn nhiễu phổ biến ở team outsourcing / freelance VN:
- Space / tab cuối ô khi copy từ Google Sheets (
[email protected]vs[email protected]) - Hoa thường email (
Info@vsinfo@) — SMTP thường không phân biệt local-part theo cách bạn nghĩ, nhưng chuỗi text thì có - Xuống dòng Windows/Mac (
\r\nvs\n) — tool tách theo dòng nên ổn, nhưng ô có xuống dòng bên trong sẽ vỡ thành nhiều mục
Tool so khớp chuỗi dòng (sau khi tùy chọn trim / lower). Không “hiểu” rằng hai URL khác query ?utm= là cùng landing — muốn gộp kiểu đó phải normalize trước.
Tool text vs Excel vs JavaScript Set
| Cách | Phù hợp | Hạn chế |
|---|---|---|
| Tool text (Kawa) | List dán nhanh, email/URL/keyword, máy không có Excel đầy đủ | Không parse CSV nhiều cột; giữ first-seen |
| Excel / Sheets | Bảng nhiều cột, cần unique theo cột rồi giữ hàng đủ field | Dễ quên trim; máy lab đôi khi hạn chế |
| JS Set / SQL DISTINCT | Pipeline code, DB, CI lặp lại mỗi ngày | Overkill cho job one-shot 5 phút |
Quy tắc đơn giản:
- Dữ liệu đang nằm trong file / clipboard → tool text hoặc Sheets
- Dữ liệu đang nằm trong mảng runtime / API → Set / Map (bài JS)
- Cần lặp lại mỗi đêm → viết script hoặc SQL, đừng mở tab thủ công
Thử ngay trên trình duyệt
🧹 Xóa trùng lặp ngay tại đây
Xóa trùng lặp Kawa hỗ trợ thực tế:
| Tùy chọn | Việc làm |
|---|---|
| (mặc định) | Giữ dòng xuất hiện đầu tiên, bỏ các lần sau |
| Xóa khoảng trắng thừa | trim() trước khi so sánh — "a" và " a " thành một |
| Không phân biệt hoa thường | So khóa toLowerCase() — vẫn giữ casing của lần đầu |
Không có upload. Phù hợp lead list — vẫn nên làm việc trên bản copy, không xóa file gốc của khách.
Ví dụ 1: email form (có space + hoa thường)
Input:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
Không bật gì: còn 5 dòng — [email protected] (có/không space đã trim tùy chọn) vẫn có thể tách khỏi [email protected] nếu bỏ trim/ignore-case.
Bật trim + không phân biệt hoa thường: còn 3 dòng:
[email protected]
[email protected]
[email protected]
Casing giữ theo lần đầu (support@…), đủ để import ESP.
Ví dụ 2: URL crawl trùng
https://example.com/a
https://example.com/b
https://example.com/a
https://example.com/c
https://example.com/b
Sau dedupe:
https://example.com/a
https://example.com/b
https://example.com/c
Crawler không hit lại cùng path — tiết kiệm bandwidth VPS nhỏ. Lưu ý: http vs https, có/không www, trailing / vẫn là chuỗi khác — normalize trước nếu cần.
Ví dụ 3: CSV nhiều cột — đừng dán cả hàng mù quáng
File khách:
id,email,source
1,[email protected],fb
2,[email protected],gg
3,[email protected],tiktok
Nếu dán cả 3 dòng data vào tool: không dòng nào trùng vì cột id/source khác. Bạn tưởng “đã unique email” nhưng [email protected] vẫn hai lần.
Đúng:
- Copy chỉ cột email (hoặc
=UNIQUEtrên Sheets) - Dedupe cột đó bằng tool nếu cần tùy chọn trim/case
- Dùng kết quả làm danh sách gửi; hoặc
UNIQUE(A:A)trên Sheets khi cần giữ hàng đầy đủ theo email đầu tiên
Tool text = máy cắt dòng. Không thay “Remove duplicates by column” của Excel khi bạn phải giữ nguyên các cột khác.
Quy trình 4 bước (ops buổi chiều)
- Sao lưu file gốc (
leads-raw.csv). - Tách cột cần unique → Notepad / cột phụ Sheets.
- Dán vào dedupe → chọn trim / ignore case.
- Đếm dòng trước/sau (Notepad++ hoặc
=COUNTA). Chênh lệch = số bản ghi trùng đã bỏ. Báo khách: “3200 → 2914 unique”.
Freelancer gửi số này trong message Zalo/Telegram giúp khách tin kết quả hơn là chỉ gửi file im lặng.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách xử lý |
|---|---|---|
| Vẫn thấy email “giống” | Khác hoa thường / space | Bật ignore case + trim |
| Mất cả nhóm dòng “khác nhau” | Dán nhầm block có dòng trống lặp | Xóa dòng trống hoặc chấp nhận 1 dòng trống còn lại |
| CSV “không bớt trùng” | Unique theo cột nhưng dán cả hàng | Tách cột trước |
| Thứ tự “sai” so với bản mới | Tool giữ first-seen | Đưa bản ghi mới lên đầu file trước khi chạy |
| Tab trình duyệt đơ | Hàng chục vạn dòng một lúc | Cắt chunk 5–10k dòng |
Khi nào chuyển sang code / SQL
- Import lặp lại mỗi ngày từ S3 / webhook
- Dedupe theo nhiều khóa (email + phone)
- Cần last-wins theo timestamp
- Object JS / NestDTO trong API
Lúc đó quay lại bài Set / Map hoặc DISTINCT ON — đừng cố nhồi vào textarea.
Checklist trước khi gửi file đã sạch
- Đã giữ bản raw
- Format 1 mục / dòng (không sót dấu phẩy CSV trong ô)
- Trim / ignore case khớp loại dữ liệu (email: thường bật cả hai)
- Đếm trước/sau và ghi chú cho khách
- Không dán secret (API key, mật khẩu) vào bất kỳ web tool nào — dùng list giả để tập
Liên kết liên quan
- Công cụ xóa trùng lặp — trim, ignore case, local
- Xóa trùng mảng JavaScript — Set / Map / khi nào dùng code
- Diff text — so hai bản list trước/sau
- Danh sách công cụ
Bookmark lý do: quy trình ops rõ (tách cột → trim/case → first-seen → đếm trước/sau) cho email/URL/CSV — không lẫn với tutorial new Set().