Nhận các dòng xuất hiện phổ biến nhất từ ​​tệp trong Linux


11

Tôi có một tệp văn bản có nhiều từ khác nhau trên mỗi dòng.
Làm cách nào tôi có thể tìm thấy 12 dòng xuất hiện thường xuyên nhất trong tệp và hiển thị chúng?
Tôi không tốt lắm với các lệnh scripting.

Nếu tôi có thể nhận được lệnh và một lời giải thích để tôi có thể hiểu cách sử dụng nó và mở rộng kiến ​​thức về các lệnh thì thật tuyệt!


Câu trả lời:


21

Bạn có thể dễ dàng làm điều này với các lệnh tích hợp.

  • Cung cấp nội dung của tập tin sort. Chúng tôi cần điều này cho bước tiếp theo.
  • Điều này đi đến uniq -c. Nó sẽ tính sự xuất hiện duy nhất của mỗi dòng. Nếu các dòng tương tự không liền kề, điều này sẽ không hoạt động mà không sắp xếp trước.
  • Sau đó, đưa nó đến một cái khác sort, bây giờ sắp xếp theo thứ tự đảo ngược ( r) và dựa trên việc ngiải thích số ( ) của uniqđầu ra. Chúng ta cần tùy chọn số vì nếu không, khoảng trắng phía trước các số sẽ dẫn đến kết quả sai (xem trợ giúp của GNUsort để biết thêm).
  • Cuối cùng, chỉ hiển thị mười hai dòng đầu tiên với head.

Lệnh sau đó sẽ là:

sort test.txt | uniq -c | sort -rn | head -n 12

Đầu ra ở đây chứa số lượng thực tế của các lần xuất hiện.

Để chỉ nhận danh sách các dòng thô, bạn có thể dẫn đầu ra tới sed:

sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'

Thí dụ:

I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!

Đầu ra từ lệnh đầu tiên, nhưng chỉ chọn 2 từ head:

6 Hello there!
3 Look at me!

Đầu ra từ lệnh thứ hai:

Hello there!
Look at me!

1
Bạn phải sắp xếp nó trước khi sử dụng uniq.
cYrus

! @slhck: Cảm ơn bạn Một câu hỏi: Các sort -rnloại theo thứ tự ngược sử dụng như phân loại lĩnh vực này số bên cạnh mỗi dòng được sản xuất bởi uniq -c? Tôi nghĩ rằng một cái gì đó giống như k1hoặc một cái gì đó như thế sẽ được sử dụng
Jim

@Jim Chính xác. rđảo ngược và nsắp xếp bằng số trên số được tạo bởi uniq. Chính xác thì bạn có ý k1gì?
slhck

@slhck: Tôi đã cố gắng tìm ra các lệnh này bằng cách sử dụng manvà tôi hiểu rằng một cú pháp sử dụng -kmột cái gì đó phải được sử dụng để chọn trường để sắp xếp theo
Jim

@cYrus: Trường hợp cạnh mà một loại cần thiết trước là gì?
Jim

2

Nếu distro của bạn có logtop

cat your_file | logtop

Nếu tệp của bạn liên tục phát triển, như tệp nhật ký, hãy thử:

tail -f your_log | logtop
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.