uniq command in 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 chưa? Trong Linux, lệnh uniq là một công cụ vô cùng hữu ích để giải quyết vấn đề này một cách nhanh chóng và hiệu quả. Bài viết này sẽ cung cấp cho bạn một cái nhìn tổng quan về lệnh uniq, cách sử dụng nó, và những ứng dụng thực tế của nó trong công việc hàng ngày.

uniq là gì?

uniq là một lệnh dòng lệnh trong hệ điều hành Linux và Unix, được sử dụng để lọc các dòng trùng lặp liền kề từ một file hoặc từ đầu vào tiêu chuẩn. Nó hoạt động bằng cách so sánh các dòng liền kề và chỉ giữ lại dòng đầu tiên của mỗi chuỗi các dòng trùng lặp. Đây là một công cụ đơn giản nhưng mạnh mẽ, giúp bạn làm sạch dữ liệu và chuẩn bị cho các bước xử lý tiếp theo.

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

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

uniq [options] [input_file] [output_file]

Trong đó:

  • uniq: Tên lệnh.
  • [options]: Các tùy chọn để điều chỉnh hành vi của lệnh.
  • [input_file]: Tên file đầu vào (nếu không có, uniq sẽ đọc từ đầu vào tiêu chuẩn).
  • [output_file]: Tên file đầu ra (nếu không có, uniq sẽ in ra đầu ra tiêu chuẩn).

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

Lệnh uniq cung cấp một số tùy chọn để bạn có thể điều chỉnh hành vi của nó. Dưới đây là một số tùy chọn phổ biến nhất:

  • -c, --count: Hiển thị số lần mỗi dòng xuất hiện.
  • -d, --repeated: Chỉ in ra các dòng trùng lặp.
  • -u, --unique: Chỉ in ra các dòng không trùng lặp.
  • -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.
  • -w N, --check-chars=N: Chỉ so sánh N ký tự đầu tiên của mỗi dòng.

Ví dụ minh họa cách sử dụng lệnh uniq

Để hiểu rõ hơn về cách sử dụng lệnh uniq, hãy cùng xem qua một số ví dụ cụ thể:

Ví dụ 1: Loại bỏ các dòng trùng lặp từ một file

Giả sử bạn có một file tên là data.txt chứa các dòng sau:

apple
banana
apple
orange
apple
banana

Để loại bỏ các dòng trùng lặp liền kề, bạn có thể sử dụng lệnh sau:

uniq data.txt output.txt

File output.txt sẽ chứa:

apple
banana
apple
orange
apple
banana

Lưu ý quan trọng: Lệnh uniq chỉ loại bỏ các dòng liền kề bị trùng lặp. Do đó, nếu các dòng trùng lặp không nằm cạnh nhau, chúng sẽ không bị loại bỏ. Để giải quyết vấn đề này, bạn cần sắp xếp file trước khi sử dụng uniq.

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

Để đếm số lần xuất hiện của mỗi dòng, bạn sử dụng tùy chọn -c:

uniq -c data.txt

Kết quả sẽ là:

      1 apple
      1 banana
      1 apple
      1 orange
      1 apple
      1 banana

Tương tự như trên, để có kết quả đúng, bạn cần sắp xếp file trước:

sort data.txt | uniq -c

Kết quả lúc này sẽ là:

      3 apple
      2 banana
      1 orange

Ví dụ 3: Chỉ in ra các dòng trùng lặp

Để chỉ in ra các dòng trùng lặp, bạn sử dụng tùy chọn -d:

sort data.txt | uniq -d

Kết quả sẽ là:

apple
banana

Ví dụ 4: Chỉ in ra các dòng không trùng lặp

Để chỉ in ra các dòng không trùng lặp, bạn sử dụng tùy chọn -u:

sort data.txt | uniq -u

Kết quả sẽ là:

orange

Ví dụ 5: Bỏ qua sự khác biệt về chữ hoa/chữ thường

Giả sử bạn có một file tên là data2.txt chứa các dòng sau:

Apple
apple
banana
Banana

Để loại bỏ các dòng trùng lặp, bỏ qua sự khác biệt về chữ hoa/chữ thường, bạn sử dụng tùy chọn -i:

sort -f data2.txt | uniq -i

Kết quả sẽ là:

apple
banana

Ứ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ế, bao gồm:

  • Xử lý log file: Loại bỏ các dòng trùng lặp trong log file để dễ dàng phân tích.
  • Làm sạch dữ liệu: Loại bỏ các bản ghi trùng lặp trong cơ sở dữ liệu hoặc file CSV.
  • Thống kê dữ liệu: Đếm số lần xuất hiện của các giá trị khác nhau trong một tập dữ liệu.
  • Phân tích văn bản: Tìm các từ hoặc cụm từ phổ biến nhất trong một văn bản.
  • Kiểm tra tính duy nhất: Đảm bảo rằng một danh sách các ID hoặc tên người dùng là duy nhất.

So sánh uniq với các công cụ khác

Ngoài uniq, còn có một số công cụ khác có thể được sử dụng để loại bỏ các dòng trùng lặp. Dưới đây là so sánh giữa uniq và một số công cụ phổ biến khác:

Công cụ Ưu điểm Nhược điểm
uniq Đơn giản, nhanh chóng, dễ sử dụng. Chỉ loại bỏ các dòng trùng lặp liền kề, yêu cầu sắp xếp dữ liệu trước.
sort -u Loại bỏ tất cả các dòng trùng lặp (không cần liền kề), sắp xếp dữ liệu đồng thời. Có thể chậm hơn uniq với các file lớn.
awk '!seen[$0]++' Loại bỏ tất cả các dòng trùng lặp (không cần liền kề), không yêu cầu sắp xếp dữ liệu trước. Có thể chậm hơn uniq và sort -u với các file lớn, cú pháp phức tạp hơn.
sed '$!N; /^\(.\)\n\1$/!P; D' Loại bỏ các dòng trùng lặp liền kề. Khó hiểu, khó sử dụng, và hiệu suất không cao.

FAQ về lệnh uniq

Tại sao lệnh uniq chỉ loại bỏ các dòng trùng lặp liền kề?

Đây là thiết kế của lệnh uniq. Nó được tối ưu hóa để hoạt động nhanh chóng bằng cách chỉ so sánh các dòng liền kề. Để loại bỏ tất cả các dòng trùng lặp, bạn cần sắp xếp file trước khi sử dụng uniq.

Làm thế nào để loại bỏ các dòng trùng lặp không phân biệt chữ hoa chữ thường?

Sử dụng tùy chọn -i (hoặc --ignore-case) để bỏ qua sự khác biệt về chữ hoa/chữ thường khi so sánh các dòng. Ví dụ: sort -f data.txt | uniq -i.

Lệnh uniq có thể xử lý các file lớn như thế nào?

Lệnh uniq có thể xử lý các file lớn khá hiệu quả, đặc biệt khi kết hợp với lệnh sort. Tuy nhiên, với các file cực lớn, các công cụ khác như awk có thể hiệu quả hơn về mặt bộ nhớ.

Kết luận

Lệnh uniq là một công cụ đơn giản nhưng mạnh mẽ trong Linux, giúp bạn loại bỏ các dòng trùng lặp một cách nhanh chóng và dễ dàng. Bằng cách hiểu rõ các tùy chọn và cách sử dụng của nó, bạn có thể tận dụng tối đa sức mạnh của uniq để xử lý dữ liệu và giải quyết các vấn đề thực tế trong công việc hàng ngày. Đừng quên kết hợp uniq với các lệnh khác như sort để đạt được kết quả tốt nhất.

Last Updated : 21/08/2025