Việc tìm kiếm văn bản cần thiết trong những tệp tin này là một yêu cầu rất phổ biến. Tuy nhiên, nhiệm vụ đơn giản này nhanh chóng trở nên phiền toái nếu tệp tin chứa các mục trùng lặp. Trong những trường hợp như vậy, chúng ta có thể sử dụng lệnh uniq để lọc văn bản trùng lặp một cách hiệu quả. Ngoài ra, câu lệnh này còn là một cách tiện lợi khi chúng ta muốn liệt kê hoặc loại bỏ các dòng trùng lặp liền kề. Nhưng điều quan trọng cần lưu ý là “uniq” chỉ hoạt động khi các mục trùng lặp nằm cạnh nhau.
Cú pháp của lệnh uniq rất dễ hiểu và tương tự như các lệnh Linux khác.
$ uniq [OPTIONS] [INPUT] [OUTPUT]
Chú ý rằng tất cả các tùy chọn và tham số của lệnh uniq là tùy chọn.
Để bắt đầu, trước tiên, chúng ta hãy tạo một tệp văn bản đơn giản bằng trình soạn thảo vi và thêm các nội dung trùng lặp sau đây nằm trên các dòng kề nhau.
$ vi linux-distributions.txt $ cat linux-distributions.txt
Tạo tệp văn bản trong Linux
Một trong những cách thông dụng của lệnh uniq là loại bỏ các dòng trùng lặp kề nhau từ tệp văn bản, như được hiển thị dưới đây.
$ uniq linux-distributions.txt
Xóa các dòng trùng lặp trong tệp văn bản
Trong đầu ra ở trên, chúng ta có thể thấy lệnh uniq đã loại bỏ thành công các dòng trùng lặp.
Trong ví dụ trước, chúng ta đã thấy cách loại bỏ các dòng trùng lặp. Tuy nhiên, đôi khi chúng ta cũng muốn biết dòng trùng lặp xuất hiện bao nhiêu lần.
Chúng ta có thể làm điều này bằng cách sử dụng tùy chọn -c như được hiển thị trong ví dụ dưới đây:
$ uniq -c linux-distributions.txt
Đếm các dòng trùng lặp trong tệp
Trong kết quả trên, cột đầu tiên biểu thị số lần dòng được lặp lại.
Theo mặc định, lệnh uniq hoạt động theo cách phân biệt chữ hoa chữ thường. Tuy nhiên, chúng ta có thể vô hiệu hóa hành vi mặc định này bằng cách sử dụng tùy chọn -i như được hiển thị dưới đây:
$ uniq -i linux-distributions.txt
Loại bỏ các dòng trùng lặp và bỏ qua phân biệt chữ hoa chữ thường
Trong ví dụ này, chúng ta có thể thấy rằng bây giờ, chuỗi Ubuntu và UBUNTU được coi là giống nhau. Ngoài ra, điều tương tự xảy ra với chuỗi CentOS và CENTOS.
Đôi khi, chúng ta chỉ muốn in ra những dòng trùng lặp từ một tệp văn bản. Trong trường hợp đó, bạn có thể sử dụng tùy chọn -d như được thể hiện.
$ uniq -d linux-distributions.txt
Chỉ in các dòng trùng lặp từ tệp
Trong đầu ra trên, chúng ta có thể thấy rằng lệnh uniq hiển thị các mục nhập trùng lặp từ mỗi nhóm.
Trong ví dụ trước đó, chúng ta đã thấy cách hiển thị một dòng trùng lặp từ mỗi nhóm. Tương tự, chúng ta cũng có thể hiển thị tất cả các dòng trùng lặp bằng cách sử dụng tùy chọn -D.
$ uniq -D linux-distributions.txt
In tất cả các dòng trùng lặp từ tệp
Đầu ra trên không hiển thị văn bản UBUNTU, CENTOS và Alpine vì chúng là các dòng duy nhất.
Trong ví dụ trước, chúng ta đã in tất cả các dòng trùng lặp. Tuy nhiên, chúng ta có thể làm cho đầu ra tương tự dễ đọc hơn bằng cách tách mỗi nhóm bằng một dòng mới.
Hãy sử dụng tùy chọn --all-repeated=separate để đạt được kết quả tương tự:
$ uniq --all-repeated=separate linux-distributions.txt
Hiển thị các dòng trùng lặp theo nhóm
Trong đầu ra trên, chúng ta có thể thấy mỗi nhóm trùng lặp được phân tách bằng ký tự xuống dòng mới.
Trong các ví dụ trước, chúng ta đã thấy cách in ra các dòng trùng lặp. Tương tự, chúng ta cũng có thể chỉ định cho lệnh uniq in ra chỉ các dòng không trùng lặp.
Bây giờ, hãy sử dụng tùy chọn -u để in ra chỉ các dòng duy nhất:
$ uniq -u linux-distributions.txt
Tìm các dòng duy nhất trong tệp
Ở đây, chúng ta có thể thấy rằng lệnh “uniq” hiển thị các dòng không bị trùng lặp.
Một trong những giới hạn của lệnh uniq là nó chỉ loại bỏ các mục trùng lặp liền kề. Tuy nhiên, đôi khi chúng ta muốn loại bỏ các mục trùng lặp mà không quan tâm đến thứ tự của chúng trong tệp đã cho.
Trong những trường hợp như vậy, trước tiên, chúng ta có thể sắp xếp nội dung của tệp và sau đó chuyển đầu ra đó vào uniq như đã thể hiện.
$ sort linux-distributions.txt | uniq
Xóa các dòng trùng lặp không liền kề trong tệp
Trong ví dụ này, chúng ta đã sử dụng các lệnh sort và uniq mà không có bất kỳ tùy chọn nào. Tuy nhiên, bạn cũng có thể kết hợp các tùy chọn hỗ trợ khác với những lệnh này.
Lệnh uniq được sử dụng với chức năng chính là xóa các dòng trùng lặp hoặc lọc văn bản trùng lặp một cách hiệu quả. Đây là chức năng vô cùng hữu ích để bạn có thể quản lý tệp tin dễ dàng trong hệ điều hành Linux.
Tips: Tham gia Channel Telegram KDATA để không bỏ sót khuyến mãi hot nào