Lệnh uniq trong linux

Lệnh uniq trong Linux: Loại bỏ dòng trùng lặp một cách dễ dàng

Bạn đã bao giờ gặp phải tình huống cần loại bỏ các dòng trùng lặp trong một file văn bản lớn trên Linux chưa? Chắc hẳn bạn sẽ nghĩ ngay đến một công cụ mạnh mẽ, nhanh chóng và hiệu quả để giải quyết vấn đề này. Và đó chính là lệnh uniq! Trong bài viết này, chúng ta sẽ cùng nhau khám phá chi tiết về lệnh uniq, từ cú pháp cơ bản, các tùy chọn nâng cao đến những ứng dụng thực tế giúp bạn làm việc hiệu quả hơn với Linux.

Hãy cùng bắt đầu hành trình khám phá sức mạnh của uniq ngay bây giờ nhé!

uniq là gì?

Lệnh uniq là một công cụ dòng lệnh trong Linux dùng để lọc các dòng trùng lặp liền kề nhau từ một file hoặc từ đầu vào tiêu chuẩn. Nó thường được sử dụng kết hợp với các lệnh khác như sort để loại bỏ tất cả các dòng trùng lặp, không chỉ những dòng liền kề. Hiểu một cách đơn giản, uniq giúp bạn "dọn dẹp" dữ liệu văn bản, loại bỏ những thông tin thừa thãi, giúp bạn tập trung vào những gì quan trọng nhất.

Cú pháp cơ bản của lệnh uniq

Cú pháp của lệnh uniq rất đơn giản:

uniq [TÙY CHỌN] [FILE ĐẦU VÀO] [FILE ĐẦU RA]
  • FILE ĐẦU VÀO: Là file văn bản mà bạn muốn lọc các dòng trùng lặp. Nếu không chỉ định, uniq sẽ đọc từ đầu vào tiêu chuẩn (stdin).
  • FILE ĐẦU RA: Là file mà bạn muốn ghi kết quả sau khi lọc. Nếu không chỉ định, uniq sẽ ghi ra đầu ra tiêu chuẩn (stdout).
  • TÙY CHỌN: Là các tùy chọn để điều chỉnh hành vi của lệnh uniq. Chúng ta sẽ tìm hiểu về các tùy chọn này ở phần sau.

Ví dụ, để loại bỏ các dòng trùng lặp liền kề nhau trong file input.txt và ghi kết quả vào file output.txt, bạn có thể sử dụng lệnh sau:

uniq input.txt output.txt

Nếu bạn muốn hiển thị kết quả trực tiếp trên màn hình, bạn có thể bỏ qua tham số FILE ĐẦU RA:

uniq input.txt

Các tùy chọn thường dùng của lệnh uniq

Lệnh uniq cung cấp nhiều tùy chọn để bạn có thể điều chỉnh cách nó hoạt động. Dưới đây là một số tùy chọn quan trọng và thường được sử dụng nhất:

  • -c, --count: Hiển thị số lần mỗi dòng xuất hiện.
  • -d, --repeated: Chỉ hiển thị các dòng trùng lặp.
  • -D, --all-repeated[=METHOD]: Hiển thị tất cả các dòng trùng lặp, có thể chỉ định phương thức nhóm các dòng trùng lặp (ví dụ: separate để tách các nhóm dòng trùng lặp bằng dòng trống).
  • -i, --ignore-case: Bỏ qua sự khác biệt về chữ hoa chữ thường khi so sánh các dòng.
  • -f N, --skip-fields=N: Bỏ qua N trường đầu tiên khi so sánh các dòng. Các trường được phân tách bởi khoảng trắng.
  • -s N, --skip-chars=N: Bỏ qua N ký tự đầu tiên khi so sánh các dòng.
  • -u, --unique: Chỉ hiển thị các dòng không trùng lặp.
  • -w N, --check-chars=N: Chỉ so sánh N ký tự đầu tiên của mỗi dòng.

Để hiểu rõ hơn về cách các tùy chọn này hoạt động, chúng ta hãy xem một vài ví dụ cụ thể.

Ví dụ minh họa

Giả sử chúng ta có một file tên là example.txt với nội dung như sau:

apple
  banana
  apple
  apple
  orange
  banana
  grape

Ví dụ 1: Đếm số lần xuất hiện của mỗi dòng

Sử dụng tùy chọn -c:

uniq -c example.txt

Kết quả:

      1 apple
        1 banana
        2 apple
        1 orange
        1 banana
        1 grape

Như bạn thấy, uniq đã đếm số lần mỗi dòng xuất hiện và hiển thị kết quả. Lưu ý rằng các dòng "apple" không liền kề nhau vẫn được đếm riêng.

Ví dụ 2: Chỉ hiển thị các dòng trùng lặp

Sử dụng tùy chọn -d:

uniq -d example.txt

Kết quả:

apple

Chỉ có dòng "apple" được hiển thị vì nó là dòng duy nhất xuất hiện nhiều hơn một lần.

Ví dụ 3: Loại bỏ dòng trùng lặp hoàn toàn (sử dụng kết hợp với sort)

Để loại bỏ tất cả các dòng trùng lặp, kể cả những dòng không liền kề nhau, chúng ta cần kết hợp uniq với lệnh sort:

sort example.txt | uniq

Kết quả:

apple
  banana
  grape
  orange

Lệnh sort sẽ sắp xếp các dòng trong file, đưa các dòng trùng lặp về liền kề nhau, sau đó uniq sẽ loại bỏ chúng.

Ứng dụng thực tế của lệnh uniq

Lệnh uniq có rất nhiều ứng dụng trong thực tế. Dưới đây là một vài ví dụ:

  • Phân tích log file: Bạn có thể sử dụng uniq để thống kê số lượng các loại lỗi khác nhau trong một log file, giúp bạn nhanh chóng xác định các vấn đề quan trọng.
  • Xử lý dữ liệu khảo sát: Khi thu thập dữ liệu khảo sát, có thể có những câu trả lời trùng lặp. Sử dụng uniq để loại bỏ các câu trả lời này, đảm bảo tính chính xác của dữ liệu.
  • Tạo danh sách duy nhất: Bạn có thể sử dụng uniq để tạo một danh sách duy nhất các địa chỉ email, tên người dùng hoặc bất kỳ loại dữ liệu nào khác.
  • So sánh kết quả của các lệnh: Bạn có thể sử dụng uniq để tìm ra sự khác biệt giữa kết quả của hai lệnh khác nhau.

Bảng so sánh các tùy chọn quan trọng của uniq

Tùy chọn Mô tả Ví dụ
-c Đếm số lần xuất hiện của mỗi dòng. uniq -c file.txt
-d Chỉ hiển thị các dòng trùng lặp. uniq -d file.txt
-u Chỉ hiển thị các dòng không trùng lặp. uniq -u file.txt
-i Bỏ qua sự khác biệt về chữ hoa chữ thường. uniq -i file.txt

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

Câu hỏi 1: Tại sao lệnh uniq chỉ loại bỏ các dòng trùng lặp liền kề nhau?

Trả lời: Đây là thiết kế ban đầu của lệnh uniq để tối ưu hóa hiệu suất. Nếu bạn muốn loại bỏ tất cả các dòng trùng lặp, hãy sử dụng kết hợp với lệnh sort.

Câu hỏi 2: Làm thế nào để loại bỏ các dòng trùng lặp mà không quan tâm đến thứ tự của các cột?

Trả lời: Bạn có thể sử dụng lệnh awk hoặc sed để trích xuất các cột cần so sánh, sau đó sắp xếp và sử dụng uniq.

Câu hỏi 3: Lệnh uniq có phân biệt chữ hoa chữ thường không?

Trả lời: Mặc định, uniq phân biệt chữ hoa chữ thường. Sử dụng tùy chọn -i để bỏ qua sự khác biệt này.

Kết luận

Lệnh uniq là một công cụ đơn giản nhưng vô cùng mạnh mẽ trong Linux. Với khả năng loại bỏ các dòng trùng lặp một cách nhanh chóng và hiệu quả, nó giúp bạn xử lý dữ liệu văn bản một cách dễ dàng. Hy vọng bài viết này đã cung cấp cho bạn những kiến thức cần thiết để sử dụng uniq một cách thành thạo. Chúc bạn thành công!

Last Updated : 20/08/2025