Chuyển đến nội dung

Xóa dòng trùng lặp

Làm sạch danh sách: bỏ dòng lặp, sắp xếp đúng cách, xóa dòng trống. Công cụ cho bạn biết dòng nào bị trùng và trùng bao nhiêu lần, thay vì lặng lẽ thu ngắn danh sách của bạn.

  • Không bao giờ lưu trữ
  • Không xếp hàng, không phải chờ
  • Không cần đăng ký, không watermark
Sắp xếp
Làm gọn
Kết quả

Kết quả sẽ hiện ở đây.

Cách hoạt động

1

Dán danh sách

Email, URL, mã sản phẩm, bất cứ thứ gì, mỗi dòng một mục. Hoặc thả một file văn bản vào.

2

Chọn thế nào là “giống nhau”

Bỏ qua dấu cách ở cuối, không phân biệt chữ hoa chữ thường, giữ bản đầu hoặc bản cuối — hoặc xóa mọi dòng từng có bản trùng.

3

Sắp xếp và làm gọn

Sắp xếp tự nhiên, đảo ngược, xáo trộn, đánh số dòng hoặc xóa dòng trống — rồi sao chép kết quả.

Điều gì xảy ra với những dòng bạn giữ lại

Trang này có hai kiểu xử lý khoảng trắng khác nhau và bạn không nên nhầm lẫn chúng. Cắt khoảng trắng để so sánh chỉ tạo khóa so sánh và không bao giờ sửa các dòng của bạn — bản được giữ lại giữ nguyên chính xác khoảng cách ban đầu. Các tùy chọn làm gọn thì ngược lại: bỏ thụt lề, gộp các chuỗi dấu cách và tab, và cắt khoảng trắng ở hai đầu dòng là những chỉnh sửa thật sự, và chúng diễn ra trước khi lọc trùng, nên bật một tùy chọn sẽ âm thầm thay đổi cả điều kiện coi là trùng lẫn hình thức của các dòng.

Một dòng trống được so sánh như mọi dòng khác, nghĩa là mọi dòng trống sau dòng trống đầu tiên đều biến mất cùng các dòng trùng khác — một danh sách có khoảng cách giữa các đoạn sẽ trở lại với một dòng trống duy nhất ở vị trí của dòng trống đầu tiên. Và báo cáo các dòng lặp hiển thị khóa so sánh chứ không phải dòng của bạn: đã được cắt khoảng trắng, và chuyển về chữ thường nếu bạn chọn không phân biệt chữ hoa chữ thường. Vì vậy một mục xuất hiện trong danh sách dưới cả dạng Smith lẫn SMITH sẽ được báo một lần, bằng chữ thường, với số lần là hai. Danh sách đó chỉ hiển thị tối đa năm mươi mục lặp nhiều nhất.

Dù đầu vào là gì, đầu ra chỉ được nối bằng ký tự line feed, nên một danh sách dán từ file Windows sẽ mất ký tự carriage return trong quá trình xử lý — thường là điều bạn muốn, và đáng lưu ý nếu bạn dán kết quả trở lại một nơi có phân biệt điều này. Thêm một tác dụng phụ: bật “Không phân biệt chữ hoa chữ thường” sẽ thay đổi cả việc sắp xếp lẫn phép so sánh, và khi đó việc sắp xếp cũng không còn phân biệt chữ có dấu với chữ không dấu, nên resume và résumé sẽ đứng cạnh nhau thay vì tách rời.

Khi bạn cần công cụ khác

Khi danh sách thực chất là một bảng, so sánh theo dòng là sai loại công cụ. Một file CSV mà “trùng” nghĩa là hai hàng giống nhau ở một cột không phải là bài toán về chuỗi ký tự, và xử lý như vậy sẽ hoặc bỏ sót dòng trùng, hoặc xóa những hàng chỉ trông giống nhau. Tính năng Remove Duplicates có sẵn của phần mềm bảng tính làm việc này đúng cách với file bạn đang mở, và mlr uniq -g làm điều đó trên dòng lệnh bằng cách chỉ định trường quyết định, với mọi dung lượng.

Với danh sách quá lớn để nằm trong một tab, hoặc danh sách bạn sẽ làm sạch lại vào tuần sau, dòng lệnh chỉ cần một biểu thức xử lý dạng luồng: awk '!seen[$0]++' giữ bản đầu tiên và thứ tự ban đầu, đúng như trang này làm theo mặc định, trên một file lớn hơn bộ nhớ của bạn. Nó không cắt khoảng trắng, không gộp chữ hoa chữ thường và không báo cáo dòng lặp — đó là sự đánh đổi, và với một file mười triệu dòng thì đó là lựa chọn đúng.

Câu hỏi thường gặp

Danh sách của tôi có bị lưu trữ ở đâu không?

Không. Không lưu trữ gì cả và không gửi yêu cầu nào đi. Bạn có thể ngắt kết nối internet sau khi trang tải xong và công cụ vẫn hoạt động.

Vì sao đã xóa rồi mà vẫn còn dòng trùng?

Gần như luôn là do khoảng trắng ở cuối dòng. Hai dòng kết thúc bằng số dấu cách khác nhau trông giống hệt nhau trên màn hình nhưng thực ra không giống, nên phép so sánh chính xác giữ lại cả hai — và bạn kết luận công cụ bị lỗi. Vì lý do đó, việc cắt khoảng trắng trước khi so sánh được BẬT sẵn ở đây. Điều quan trọng là nó chỉ ảnh hưởng đến PHÉP SO SÁNH: dòng được giữ lại vẫn giữ nguyên văn bản gốc, vì lặng lẽ sửa các dòng của bạn không phải là ý nghĩa của “xóa dòng trùng”.

Bản nào được giữ lại?

Mặc định là bản đầu tiên, và thứ tự của các dòng còn lại không bị động đến — điều này quan trọng khi danh sách vốn đã được sắp theo một thứ tự có ý nghĩa. Bạn có thể chọn giữ bản cuối, hoặc xóa mọi dòng từng có bản trùng, chỉ để lại những dòng xuất hiện đúng một lần. Tùy chọn cuối này là cách tìm những mục chỉ có trong một danh sách.

Vì sao khi sắp xếp item10 lại đứng trước item2?

Đó là cách sắp xếp theo bảng chữ cái thông thường, trong đó “1” đứng trước “2” và phần còn lại của con số không bao giờ được xét đến. Bật thứ tự tự nhiên thì các chuỗi chữ số được so sánh như số, nên item2 đứng trước item10 — đúng thứ tự người ta mong đợi. Văn bản có dấu cũng được xử lý đúng: phép so sánh đơn giản xếp “Zürich” sau “Zyzzyva”, vì nó so sánh các con số bên dưới chứ không so sánh chữ cái.

Công cụ có cho biết những gì đã bị xóa không?

Có — những dòng xuất hiện nhiều hơn một lần được liệt kê kèm số lần, dòng lặp nhiều nhất đứng đầu. Biết được mục NÀO xuất hiện bốn lần thường hữu ích hơn biết rằng ba dòng đã biến mất.

Xáo trộn có thật sự ngẫu nhiên không?

Có. Công cụ dùng thuật toán xáo trộn Fisher-Yates với nguồn ngẫu nhiên mật mã học của trình duyệt. Cách làm tắt phổ biến — sắp xếp bằng một phép so sánh ngẫu nhiên — hoàn toàn không phải là xáo trộn: các thuật toán sắp xếp giả định phép so sánh nhất quán, và với một phép so sánh ngẫu nhiên, kết quả bị lệch về thứ tự ban đầu ở mức đo được. Nếu bạn đang bốc thăm người thắng từ một danh sách, khác biệt đó rất quan trọng.

Có giới hạn dung lượng không?

Giới hạn là bộ nhớ khả dụng, không phải một mức dung lượng cố định. Danh sách hàng trăm nghìn dòng vẫn xử lý tốt.

Nên biết: Việc sắp xếp dùng quy tắc ngôn ngữ của trình duyệt, nên chữ có dấu và các bảng chữ cái khác nhau được xếp theo cách người đọc mong đợi chứ không theo giá trị byte. Điều đó cũng có nghĩa thứ tự có thể hơi khác nhau giữa các trình duyệt. Danh sách rất lớn được giữ toàn bộ trong bộ nhớ.

Đặt công cụ này lên website của bạn

Miễn phí cho mọi blog, trang lớp học hay bài viết hướng dẫn. Chỉ cần dán một đoạn mã là khách truy cập có thể dùng ngay trên trang của bạn.