8 ví dụ về lệnh uniq trên Centos / Ubuntu / Debian / Fedora

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ơ bản của lệnh uniq 

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

Xóa các dòng trùng lặp bằng lệnh uniq trong hệ điều hành Linux

Tạo tệp văn bản trong Linux

Cách sử dụng lệnh uniq với 8 ví dụ điển hình

Xóa các dòng trùng lặp khỏi tệp văn bản

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 bằng lệnh uniq trong hệ điều hành Linux

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.

Đếm số dòng trùng lặp trong tệp văn bản

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

Xóa các dòng trùng lặp bằng lệnh uniq trong hệ điều hành Linux

Đế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.

Xóa các bản sao không phân biệt chữ hoa chữ thường

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

Xóa các dòng trùng lặp bằng lệnh uniq trong hệ điều hành Linux

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.

Chỉ in các dòng trùng lặp từ một tệp

Đô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

Xóa các dòng trùng lặp bằng lệnh uniq trong hệ điều hành Linux

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.

In tất cả các dòng trùng lặp từ một tệp

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

Xóa các dòng trùng lặp bằng lệnh uniq trong hệ điều hành Linux

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.

Hiển thị các dòng trùng lặp theo nhóm trong một dòng mới

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

Xóa các dòng trùng lặp bằng lệnh uniq trong hệ điều hành Linux

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.

Chỉ in các dòng duy nhất từ ​​một tệp

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

Xóa các dòng trùng lặp bằng lệnh uniq trong hệ điều hành Linux

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.

Xóa các dòng trùng lặp không liền kề trong tệ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 bằng lệnh uniq trong hệ điều hành Linux

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.

Bài viết liên quan