Lệnh uniq trong Linux: Loại bỏ trùng lặp

Bạn muốn loại bỏ các dòng trùng lặp trong một file văn bản trên Linux? Lệnh uniq là công cụ hoàn hảo cho bạn. Hãy cùng khám phá cách sử dụng lệnh này để tối ưu hóa quy trình làm việc của bạn.

A detailed explanation of the uniq command in Linux.

Linux là một hệ điều hành mạnh mẽ và linh hoạt. Tìm hiểu thêm về Linux và các lệnh khác để khai thác tối đa sức mạnh của nó.

Giới thiệu về lệnh uniq

Mục đích của lệnh uniq

Lệnh uniq được sử dụng để lọc các dòng trùng lặp liền kề trong một file hoặc từ đầu vào chuẩn. Nó rất hữu ích để xử lý dữ liệu văn bản và làm sạch các tập tin log.

Cú pháp cơ bản

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

uniq [tùy chọn] [file đầu vào] [file đầu ra]

Nếu không có file đầu ra được chỉ định, kết quả sẽ được in ra màn hình.

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

-c hoặc --count

Tùy chọn này hiển thị số lần mỗi dòng xuất hiện.

uniq -c file.txt

Kết quả sẽ hiển thị số lần xuất hiện của mỗi dòng, ví dụ: "3 This is a line".

-d hoặc --repeated

Chỉ in các dòng trùng lặp.

uniq -d file.txt

Lệnh này sẽ chỉ in ra những dòng xuất hiện nhiều hơn một lần.

-u hoặc --unique

Chỉ in các dòng không trùng lặp.

uniq -u file.txt

Lệnh này sẽ chỉ in ra những dòng xuất hiện duy nhất một lầ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.

uniq -i file.txt

Ví dụ, "Line" và "line" sẽ được coi là giống nhau.

-f N hoặc --skip-fields=N

Bỏ qua N trường đầu tiên khi so sánh các dòng. Trường được phân tách bằng khoảng trắng.

uniq -f 2 file.txt

Lệnh này sẽ bỏ qua hai trường đầu tiên trên mỗi dòng khi so sánh.

-s N hoặc --skip-chars=N

Bỏ qua N ký tự đầu tiên khi so sánh các dòng.

uniq -s 5 file.txt

Lệnh này sẽ bỏ qua năm ký tự đầu tiên trên mỗi dòng khi so sánh.

-w N hoặc --check-chars=N

Chỉ so sánh N ký tự đầu tiên của mỗi dòng.

uniq -w 10 file.txt

Lệnh này sẽ chỉ so sánh mười ký tự đầu tiên trên mỗi dòng.

Ví dụ minh họa

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

Giả sử bạn có một file tên là `data.txt` với nội dung sau:

apple
banana
apple
orange
orange
orange

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

uniq data.txt

Kết quả sẽ là:

apple
banana
apple
orange

Lưu ý rằng lệnh uniq chỉ loại bỏ các dòng trùng lặp *liền kề*. Do đó, dòng "apple" thứ hai vẫn được giữ lại.

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

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

uniq -c data.txt

Kết quả sẽ là:

1 apple
1 banana
1 apple
1 orange

Do các dòng "apple" và "orange" không liền kề, số lượng của chúng đều là 1.

Ví dụ 3: Sắp xếp và loại bỏ trùng lặp

Để 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 . Sử dụng lệnh sort :

sort data.txt | uniq

Kết quả sẽ là:

apple
banana
orange

Trong trường hợp này, lệnh sort sắp xếp các dòng liền kề nhau. Sau đó, lệnh uniq loại bỏ các dòng trùng lặp.

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

Lệnh uniq có thể được sử dụng trong nhiều tình huống khác nhau:

  • Xử lý log files: Loại bỏ các dòng lặp lại để dễ dàng phân tích lỗi.
  • Chuẩn bị dữ liệu: Làm sạch dữ liệu trước khi đưa vào các công cụ phân tích.
  • Tạo danh sách duy nhất: Lọc danh sách các mục để đảm bảo không có trùng lặp.

Lệnh uniq có phân biệt chữ hoa chữ thường không?

Mặc định, lệnh uniq phân biệt chữ hoa và chữ thường. Để bỏ qua sự khác biệt này, bạn có thể sử dụng tùy chọn -i hoặc --ignore-case .

Làm thế nào để loại bỏ tất cả các dòng trùng lặp trong một file, không chỉ các dòng liền kề?

Bạn có thể sử dụng lệnh sort kết hợp với uniq . Ví dụ: sort file.txt | uniq . Lệnh sort sẽ sắp xếp các dòng, đưa các dòng trùng lặp lại gần nhau, sau đó uniq sẽ loại bỏ chúng.

Làm thế nào để đếm số lần xuất hiện của mỗi dòng duy nhất?

Sử dụng tùy chọn -c hoặc --count . Ví dụ: uniq -c file.txt . Kết quả sẽ hiển thị số lần mỗi dòng xuất hiện.

Lệnh uniq có thể xử lý file lớn không?

Lệnh uniq có thể xử lý file lớn, nhưng hiệu suất có thể bị ảnh hưởng. Đối với các file rất lớn, bạn có thể cần xem xét các công cụ xử lý dữ liệu lớn khác.

Tôi có thể lưu kết quả của lệnh uniq vào một file mới không?

Có, bạn có thể chuyển hướng đầu ra của lệnh uniq vào một file mới bằng cách sử dụng toán tử >. Ví dụ: uniq input.txt > output.txt .