Đếm số lần mỗi dòng xuất hiện trong một tệp


23

Nói rằng tôi có một tập tin chứa:

A
A
A
B
CC

Tôi muốn có đầu ra như thế này:

A 3
B 1
CC 1

Câu trả lời:


23

Tôi đã hiểu rồi; một trong uniqcác tùy chọn là -c, cho "dòng tiền tố theo số lần xuất hiện":

$ uniq -c

1
Lưu ý rằng đặt các số đầu tiên. Nếu bạn cầu kỳ về đơn đặt hàng, bạn có thể làm:uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
frabjous

12
Cũng lưu ý rằng nó chỉ tính các dòng lặp lại liền kề. Một thành ngữ phổ biến làsort | uniq
Steven D

4
uniq cũng đặt số đếm trước mốc. Câu hỏi ban đầu thực sự sẽ cần một cái gì đó như thế này: sắp xếp tên tệp | uniq -c | awk '{in $ 2, $ 1}'
Bruce Ediger

Trong trường hợp không rõ ràng từ các ý kiến ​​trên, bạn phải đảm bảo dữ liệu được sắp xếp trước để đạt được mục tiêu của mình. Nếu nó không được sắp xếp, bạn sẽ có các mục lặp lại. Ví dụ: nếu tệp gốc của bạn là thay thế A \ A \ A \ B \ A \ CC, đầu ra của chỉ uniq -chiển thị A 3và hiển thị sau đó A 1. Sắp xếp trước, sẽ đảm bảo tất cả các dòng giống hệt nhau được nhóm lại với nhau
drootang

16

Tôi chỉ đến đây với một vấn đề tương tự. Từ điều này, tôi quản lý để đưa ra một lệnh cao cấp hơn một chút, mà tôi hy vọng là hữu ích cho những người khác.

Như Steven D đã nói trong các ý kiến ​​trên uniqchỉ tính các dòng lặp lại liền kề, vì vậy bạn cần sắp xếp các dòng trước. Sau đó, chúng tôi tìm thấy các dòng duy nhất sau đó sắp xếp lại để các dòng xuất hiện nhiều nhất ở trên cùng.

sort file.txt | uniq -c | sort -nr > output.txt

Đầu ra được chuyển hướng vào tập tin output.txt. Nếu bạn chỉ muốn xem kết quả trên dòng lệnh, hãy xóa chuyển hướng và thay đổi lệnh cuối cùng để sort -ndòng phổ biến nhất sẽ ở dưới cùng, tức là chắc chắn vẫn còn trên màn hình.


4
Bạn có thể thay thế cat file.txt | sortbằng chỉ sort file.txt. :)
mattdm

1
@mattdm: nhược điểm của công thức đó là bạn không thể nhanh chóng thay thế catbằng một thứ thú vị hơn. Vì, bạn biết đấy, không có cat.
SamB

1
@SamB Sau đó viết nó thành < file.txt sort | uniq -c. Điều này dễ dàng để chỉnh sửa, và vẫn tránh được những thứ không cần thiết cat.
hvd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.