BÀI VIẾT

Hướng dẫn sử dụng lệnh uniq trên Linux

3.0K
author Đặng Văn Chương - 2022-08-11 15:19:56 (GMT+7)

Giới thiệu

Lệnh uniq trong Linux là một tiện ích dòng lệnh báo cáo hoặc lọc ra các dòng lặp lại trong một tệp. Nói một cách dễ hiểu, uniq là công cụ giúp phát hiện các dòng trùng lặp liền kề và đồng thời xóa các dòng trùng lặp. uniq lọc ra các dòng kết hợp liền kề từ tệp đầu vào (được yêu cầu làm đối số) và ghi dữ liệu đã lọc vào tệp đầu ra.

Cú pháp câu lệnh uniq

bash (non-root)
uniq [OPTION] [INPUT [OUTPUT]]

Chú thích tham số lệnh uniq:

  • [OPTION]: Là các tùy chọn lệnh uniq.
  • INPUT: Là nội dung tệp đầu vào cho các dòng lặp lại cần được lọc ra và nếu INPUT không được chỉ định thì uniq sẽ đọc từ đầu vào chuẩn.
  • OUTPUT: Là tệp đầu ra trong đó bạn có thể lưu trữ đầu ra đã lọc được tạo bởi lệnh uniq và như trong trường hợp INPUT nếu OUTPUT không được chỉ định thì uniq sẽ ghi vào đầu ra chuẩn.

Một số ví dụ lệnh uniq

Để kiểm tra phiên bản uniq chúng ta sử dụng câu lệnh sau:

bash (non-root)
uniq --version
Kết quả
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard M. Stallman and David MacKenzie.

Để nhận thông tin trợ giúp lệnh uniq chúng ta sử dụng câu lệnh sau:

bash (non-root)
uniq --help
Kết quả
Usage: uniq [OPTION]... [INPUT [OUTPUT]]
Filter adjacent matching lines from INPUT (or standard input),
writing to OUTPUT (or standard output).

With no options, matching lines are merged to the first occurrence.

Mandatory arguments to long options are mandatory for short options too.
  -c, --count           prefix lines by the number of occurrences
  -d, --repeated        only print duplicate lines, one for each group
  -D                    print all duplicate lines
      --all-repeated[=METHOD]  like -D, but allow separating groups
                                 with an empty line;
                                 METHOD={none(default),prepend,separate}
  -f, --skip-fields=N   avoid comparing the first N fields
      --group[=METHOD]  show all items, separating groups with an empty line;
                          METHOD={separate(default),prepend,append,both}
  -i, --ignore-case     ignore differences in case when comparing
  -s, --skip-chars=N    avoid comparing the first N characters
  -u, --unique          only print unique lines
  -z, --zero-terminated     line delimiter is NUL, not newline
  -w, --check-chars=N   compare no more than N characters in lines
      --help     display this help and exit
      --version  output version information and exit

Bây giờ, chúng ta hãy tìm hiểu việc sử dụng điều này với sự trợ giúp của một ví dụ. Giả sử chúng ta có một tệp văn bản có tên info.txt chứa các dòng lặp lại cần được bỏ qua. Điều này có thể được thực hiện đơn giản với uniq.

info.txt
Tôi sống tại thành phố Hồ Chí Minh
Tôi sống tại thành phố Hồ Chí Minh
Tôi sống tại thành phố Hồ Chí Minh
Tôi sống tại thành phố Hồ Chí Minh
Tôi yêu con người ở đây
Tôi sống tại thành phố Hồ Chí Minh và tôi yêu con người ở đây

Như chúng ta có thể thấy rằng tệp ở trên chứa nhiều dòng trùng lặp. Bây giờ, chúng ta hãy sử dụng lệnh uniq để loại bỏ chúng bằng lệnh sau:

bash (non-root)
uniq info.txt
Kết quả
Tôi sống tại thành phố Hồ Chí Minh
Tôi yêu con người ở đây
Tôi sống tại thành phố Hồ Chí Minh và tôi yêu con người ở đây

Chúng ta có thể thấy rằng chỉ sử dụng tên của tệp đầu vào trong ví dụ uniq ở trên và vì chúng tôi không sử dụng bất kỳ tệp đầu ra nào để lưu trữ đầu ra đã tạo, lệnh uniq hiển thị đầu ra đã lọc trên đầu ra chuẩn với tất cả các bản sao dòng đã bị xóa.

Các tùy chọn lệnh uniq

  • -c: Nó cho biết số lần một dòng được lặp lại bằng cách hiển thị một số dưới dạng tiền tố với dòng.
  • -d: Nó chỉ in các dòng lặp lại chứ không in các dòng không lặp lại.
  • -D: Nó in tất cả các dòng trùng lặp và METHOD có thể là bất kỳ dòng nào sau đây:
  • none: Không phân tách các dòng trùng lặp. Đây là mặc định.
  • prepend: Chèn một dòng trống trước mỗi tập hợp các dòng trùng lặp.
  • separate: Chèn một dòng trống giữa mỗi tập hợp các dòng trùng lặp.
  • -f N: Nó cho phép bạn bỏ qua N trường (một trường là một nhóm các ký tự, được phân cách bằng khoảng trắng) của một dòng trước khi xác định tính duy nhất của một dòng.
  • -i: Theo mặc định, các phép so sánh được thực hiện có phân biệt chữ hoa chữ thường nhưng với tùy chọn này có thể thực hiện các phép so sánh không phân biệt chữ hoa chữ thường.
  • -s N: Nó không so sánh N ký tự đầu tiên của mỗi dòng trong khi xác định tính duy nhất. Điều này giống như tùy chọn -f, nhưng nó bỏ qua các ký tự riêng lẻ thay vì các trường.
  • -u: Nó cho phép bạn chỉ in các dòng duy nhất.
  • -z: Nó sẽ tạo một dòng kết thúc bằng 0 byte (NULL), thay vì một dòng mới.
  • -w N: Nó chỉ so sánh N ký tự trong một dòng.
  • --help: Nó hiển thị thông báo trợ giúp và thoát ra.
  • --version: Nó hiển thị thông tin phiên bản và thoát.

Ví dụ minh họa lệnh uniq với các tùy chọn

Sử dụng lệnh uniq với tùy chọn -c: Cho biết số lần một dòng lệnh lập lại.

bash (non-root)
uniq -c info.txt
Kết quả
      4 Tôi sống tại thành phố Hồ Chí Minh
      1 Tôi yêu con người ở đây
      1 Tôi sống tại thành phố Hồ Chí Minh và tôi yêu con người ở đây

Sử dụng lệnh uniq với tùy chọn -d: Chỉ in các dòng lập lại

bash (non-root)
uniq -d info.txt
Kết quả
Tôi sống tại thành phố Hồ Chí Minh

Sử dụng lệnh uniq với tùy chọn -D: Chỉ in các dòng trùng lặp nhưng không in một dòng cho mỗi nhóm.

bash (non-root)
uniq -D info.txt
Kết quả
Tôi sống tại thành phố Hồ Chí Minh
Tôi sống tại thành phố Hồ Chí Minh
Tôi sống tại thành phố Hồ Chí Minh
Tôi sống tại thành phố Hồ Chí Minh

Sử dụng lệnh uniq với tùy chọn -u: Chỉ in các dòng duy nhất trong tệp.

bash (non-root)
uniq -u info.txt
Kết quả
Tôi yêu con người ở đây
Tôi sống tại thành phố Hồ Chí Minh và tôi yêu con người ở đây

Sử dụng lệnh uniq với tùy chọn -f N: Như đã nói ở trên, điều này cho phép bỏ qua N trường trong khi so sánh tính duy nhất của các dòng. Tùy chọn này hữu ích khi các dòng được đánh số như thể hiện trong ví dụ bên dưới:

info.txt
1. Tôi sống tại thành phố Hồ Chí Minh
2. Tôi sống tại thành phố Hồ Chí Minh
3. Tôi sống tại thành phố Hồ Chí Minh
4. Tôi sống tại thành phố Hồ Chí Minh
5. Tôi yêu con người ở đây
6. Tôi sống tại thành phố Hồ Chí Minh và tôi yêu con người ở đây
bash (non-root)
uniq -f 2 info.txt 
Kết quả
1. Tôi sống tại thành phố Hồ Chí Minh
5. Tôi yêu con người ở đây
6. Tôi sống tại thành phố Hồ Chí Minh và tôi yêu con người ở đây

Sử dụng lệnh uniq với tùy chọn -i: được sử dụng để làm cho phép so sánh không phân biệt chữ hoa chữ thường.

info.txt
Tôi sống tại thành phố Hồ Chí Minh
Tôi sống tại thành phố Hồ Chí Minh
Tôi sống tại Thành phố Hồ Chí Minh
Tôi sống tại Thành phố Hồ Chí Minh
Tôi yêu con người ở đây
Tôi sống tại thành phố Hồ Chí Minh và Tôi yêu con người ở đây
bash (non-root)
uniq -i info.txt
Kết quả
Tôi sống tại thành phố Hồ Chí Minh
Tôi yêu con người ở đây
Tôi sống tại thành phố Hồ Chí Minh và Tôi yêu con người ở đây

Kết luận

uniq là một công cụ khá độc đáo mà Linux cung cấp. Với rất nhiều tính năng mạnh mẽ, nó có thể hữu ích theo nhiều cách. Qua bài hướng dẫn này chúng ta đã biết danh sách một số tùy chọn và ý nghĩa của chúng.


Bạn có làm được theo hướng dẫn này không?

Bài liên quan

Lệnh xác định vị trí của tệp hoặc thư mục trên Linux
Lệnh xác định vị trí của tệp hoặc thư mục trên Linux
Lệnh kiểm tra nhiều cổng port đang mở của một tên miền trên Linux
Lệnh kiểm tra nhiều cổng port đang mở của một tên miền trên Linux
Lệnh tạo một dãy số tăng dần trên Linux
Lệnh tạo một dãy số tăng dần trên Linux

Object Storage

Chuẩn S3, không giới hạn băng thông

Object Storage

Thuê Server Riêng

Chi phí thấp, cấu hình cao

Thuê Server Riêng
Thông tin tác giả
Bình luận

Tính năng đang được phát triển

Đang tải bình luận