Cách sử dụng lệnh uniq trên Linux

Spread the love

Lệnh uniq của Linux quét qua các tệp văn bản của bạn để tìm kiếm các dòng duy nhất hoặc trùng lặp. Trong hướng dẫn này, chúng tôi đề cập đến tính linh hoạt và các tính năng của nó, cũng như cách bạn có thể tận dụng tối đa tiện ích tiện lợi này.

Tìm dòng văn bản phù hợp trên Linux

Lệnh uniq là nhanh chóng, linh hoạt và tuyệt vời với những gì nó làm. Tuy nhiên, giống như nhiều lệnh của Linux, nó có một vài điều kỳ quặc — điều này là tốt, miễn là bạn biết về chúng. Nếu bạn lao vào mà không có một chút bí quyết của người trong cuộc, bạn có thể sẽ phải vò đầu bứt tai trước kết quả. Chúng tôi sẽ chỉ ra những điều kỳ quặc này khi chúng tôi đi.

Lệnh uniq là hoàn hảo cho những người trong trại duy nhất, được thiết kế để làm-một-điều-và-làm-tốt. Đó là lý do tại sao nó cũng đặc biệt thích hợp để làm việc với các đường ống và đóng vai trò của nó trong các đường ống dẫn lệnh. Một trong những cộng tác viên thường xuyên nhất là sắp xếp vì uniq phải có đầu vào được sắp xếp để hoạt động.

Hãy đốt cháy nó lên!

Chạy uniq mà không có tùy chọn

Chúng tôi có một tệp văn bản chứa lời bài hát cho Robert Johnson’s bài hát Tôi tin rằng tôi sẽ phủ bụi cây chổi của tôi. Hãy xem những gì uniq làm cho nó.

Chúng tôi sẽ nhập như sau để chuyển đầu ra thành ít hơn:

uniq dust-my-broom.txt | less

Chúng tôi nhận được toàn bộ bài hát, bao gồm cả các dòng trùng lặp, với ít hơn:

Đầu ra từ

Đó dường như không phải là những đường duy nhất cũng không phải là những đường trùng lặp.

Đúng – bởi vì đây là câu hỏi đầu tiên. Nếu bạn chạy uniq mà không có tùy chọn nào, nó sẽ hoạt động như thể bạn đã sử dụng tùy chọn -u (dòng duy nhất). Điều này yêu cầu uniq chỉ in các dòng duy nhất từ ​​tệp. Lý do bạn thấy các dòng trùng lặp là bởi vì, để uniq coi một dòng là trùng lặp, nó phải nằm liền kề với dòng trùng lặp của nó, đó là nơi sắp xếp xuất hiện.

  Cách cài đặt ứng dụng khách email Hiri trên Linux

Khi chúng tôi sắp xếp tệp, nó sẽ nhóm các dòng trùng lặp và uniq coi chúng là bản sao. Chúng tôi sẽ sử dụng sắp xếp trên tệp, chuyển đầu ra đã sắp xếp thành uniq, sau đó chuyển đầu ra cuối cùng thành ít hơn.

Để làm như vậy, chúng tôi nhập như sau:

sort dust-my-broom.txt | uniq | less

Các

Danh sách các dòng được sắp xếp sẽ xuất hiện với số lượng ít hơn.

Câu nói, “Tôi tin rằng tôi sẽ phủi chổi của tôi,” chắc chắn xuất hiện trong bài hát nhiều hơn một lần. Trên thực tế, nó được lặp lại hai lần trong bốn dòng đầu tiên của bài hát.

Vì vậy, tại sao nó lại hiển thị trong một danh sách các dòng duy nhất? Bởi vì lần đầu tiên một dòng xuất hiện trong tệp, nó là duy nhất; chỉ các mục tiếp theo là trùng lặp. Bạn có thể coi nó như là liệt kê sự xuất hiện đầu tiên của mỗi dòng duy nhất.

Hãy sử dụng sắp xếp lại và chuyển hướng đầu ra thành một tệp mới. Bằng cách này, chúng ta không phải sử dụng sắp xếp trong mọi lệnh.

Chúng tôi gõ lệnh sau:

sort dust-my-broom.txt > sorted.txt

Các lệnh sorted.txt ”trong cửa sổ dòng lệnh. ‘ width = ”646 ″ height =” 57 ″ onload = ”pagespeed.lazyLoadImages.loadIfVosystemAndMaybeBeacon (this);” onerror = ”this.onerror = null; pagespeed.lazyLoadImages.loadIfVibleAndMaybeBeacon (this);”>

Bây giờ, chúng tôi có một tệp được sắp xếp trước để làm việc.

Đếm số lần trùng lặp

Bạn có thể sử dụng tùy chọn -c (count) để in số lần mỗi dòng xuất hiện trong tệp.

Nhập lệnh sau:

uniq -c sorted.txt | less

Các

Mỗi dòng bắt đầu bằng số lần dòng đó xuất hiện trong tệp. Tuy nhiên, bạn sẽ nhận thấy dòng đầu tiên trống. Điều này cho bạn biết có năm dòng trống trong tệp.

Đầu ra từ

Nếu bạn muốn đầu ra được sắp xếp theo thứ tự số, bạn có thể đưa đầu ra từ uniq vào sắp xếp. Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng các tùy chọn -r (đảo ngược) và -n (sắp xếp số), và chuyển kết quả thành ít hơn.

Chúng tôi gõ như sau:

uniq -c sorted.txt | sort -rn | less

Các

Danh sách được sắp xếp theo thứ tự giảm dần dựa trên tần suất xuất hiện của mỗi dòng.

Chỉ liệt kê các dòng trùng lặp

Nếu bạn chỉ muốn xem các dòng được lặp lại trong một tệp, bạn có thể sử dụng tùy chọn -d (lặp lại). Bất kể một dòng được sao chép bao nhiêu lần trong một tệp, nó chỉ được liệt kê một lần.

  3 cách xóa an toàn ổ cứng trên Linux

Để sử dụng tùy chọn này, chúng tôi nhập như sau:

uniq -d sorted.txt

Các

Các dòng trùng lặp được liệt kê cho chúng tôi. Bạn sẽ nhận thấy dòng trống ở trên cùng, có nghĩa là tệp chứa các dòng trống trùng lặp — nó không phải là khoảng trống do uniq để lại để bù đắp danh sách một cách thẩm mỹ.

Đầu ra từ

Chúng tôi cũng có thể kết hợp các tùy chọn -d (lặp lại) và -c (đếm) và chuyển đầu ra thông qua sắp xếp. Điều này cung cấp cho chúng tôi một danh sách được sắp xếp gồm các dòng xuất hiện ít nhất hai lần.

Nhập thông tin sau để sử dụng tùy chọn này:

uniq -d -c sorted.txt | sort -rn

Các

Liệt kê tất cả các dòng trùng lặp

Nếu bạn muốn xem danh sách mọi dòng trùng lặp, cũng như mục nhập cho mỗi lần một dòng xuất hiện trong tệp, bạn có thể sử dụng tùy chọn -D (tất cả các dòng trùng lặp).

Để sử dụng tùy chọn này, bạn nhập như sau:

uniq -D sorted.txt | less

Các

Danh sách chứa một mục nhập cho mỗi dòng trùng lặp.

Nếu bạn sử dụng tùy chọn –group, nó sẽ in mọi dòng trùng lặp với một dòng trống trước (thêm trước) hoặc sau mỗi nhóm (nối thêm), hoặc cả trước và sau (cả hai) mỗi nhóm.

Chúng tôi đang sử dụng append làm công cụ sửa đổi, vì vậy chúng tôi nhập như sau:

uniq --group=append sorted.txt | less

Các

Các nhóm được phân tách bằng các dòng trống để dễ đọc hơn.

Đầu ra từ

Kiểm tra một số ký tự nhất định

Theo mặc định, uniq kiểm tra toàn bộ độ dài của mỗi dòng. Tuy nhiên, nếu bạn muốn giới hạn kiểm tra ở một số ký tự nhất định, bạn có thể sử dụng tùy chọn -w (ký tự kiểm tra).

Trong ví dụ này, chúng tôi sẽ lặp lại lệnh cuối cùng, nhưng giới hạn so sánh trong ba ký tự đầu tiên. Để làm như vậy, chúng ta gõ lệnh sau:

uniq -w 3 --group=append sorted.txt | less

Các

Kết quả và phân nhóm chúng tôi nhận được khá khác nhau.

Đầu ra từ

Tất cả các dòng bắt đầu bằng “I b” được nhóm lại với nhau vì các phần đó của các dòng giống hệt nhau, vì vậy chúng được coi là trùng lặp.

Tương tự như vậy, tất cả các dòng bắt đầu bằng “Tôi” được coi là bản sao, ngay cả khi phần còn lại của văn bản khác nhau.

Bỏ qua một số ký tự nhất định

Có một số trường hợp có thể có lợi nếu bỏ qua một số ký tự nhất định ở đầu mỗi dòng, chẳng hạn như khi các dòng trong tệp được đánh số. Hoặc, giả sử bạn cần uniq để nhảy qua một dấu thời gian và bắt đầu kiểm tra các dòng từ ký tự sáu thay vì từ ký tự đầu tiên.

  Cách cài đặt KDE Connect trên Linux để truy cập tệp và thông báo trên Andriod

Dưới đây là phiên bản của tệp được sắp xếp của chúng tôi với các dòng được đánh số.

Nếu chúng ta muốn uniq bắt đầu kiểm tra so sánh của nó ở ký tự ba, chúng ta có thể sử dụng tùy chọn -s (bỏ qua ký tự) bằng cách nhập như sau:

uniq -s 3 -d -c numbered.txt

Các

Các dòng được phát hiện là trùng lặp và được đếm chính xác. Lưu ý rằng số dòng được hiển thị là số của lần xuất hiện đầu tiên của mỗi bản sao.

Bạn cũng có thể bỏ qua các trường (một loạt các ký tự và một số khoảng trắng) thay vì các ký tự. Chúng tôi sẽ sử dụng tùy chọn -f (fields) để cho uniq biết những trường nào cần bỏ qua.

Chúng tôi gõ như sau để yêu cầu uniq bỏ qua trường đầu tiên:

uniq -f 1 -d -c  numbered.txt

Các

Chúng tôi nhận được kết quả tương tự như chúng tôi đã làm khi chúng tôi yêu cầu uniq bỏ qua ba ký tự ở đầu mỗi dòng.

Bỏ qua trường hợp

Theo mặc định, uniq phân biệt chữ hoa chữ thường. Nếu cùng một chữ cái xuất hiện được giới hạn và ở dạng chữ thường, uniq coi các dòng là khác nhau.

Ví dụ: kiểm tra kết quả đầu ra từ lệnh sau:

uniq -d -c sorted.txt | sort -rn

Các

Các dòng “Tôi tin rằng tôi sẽ phủi chổi của tôi” và “Tôi tin rằng tôi sẽ phủi chổi của mình” không được coi là trùng lặp vì sự khác biệt về chữ “B” trong “tin”.

Tuy nhiên, nếu chúng tôi bao gồm tùy chọn -i (bỏ qua chữ hoa chữ thường), những dòng này sẽ được coi là trùng lặp. Chúng tôi gõ như sau:

uniq -d -c -i sorted.txt | sort -rn

Các

Các dòng hiện được coi là trùng lặp và được nhóm lại với nhau.

Linux đặt vô số tiện ích đặc biệt theo ý của bạn. Giống như nhiều người trong số họ, uniq không phải là một công cụ bạn sẽ sử dụng hàng ngày.

Đó là lý do tại sao phần lớn để trở nên thành thạo Linux là nhớ công cụ nào sẽ giải quyết vấn đề hiện tại của bạn và bạn có thể tìm lại công cụ đó ở đâu. Tuy nhiên, nếu bạn thực hành, bạn sẽ ổn trên con đường của mình.

Hoặc, bạn luôn có thể chỉ cần tìm kiếm How-To Geek — chúng tôi có thể có một bài viết về nó.

x