2013-06-04 35 views
5

Giả sử tôi có một tập tin tương tự như sauTìm đường thường gặp nhất trong tập tin trong bash

Abigail 85 
Kaylee 25 
Kaylee 25 
kaylee 
Brooklyn 
Kaylee 25 
kaylee 25 

Tôi muốn tìm dòng lặp đi lặp lại nhất, đầu ra phải được chỉ đường.

Tôi đã thử

sort list | uniq -c 

nhưng tôi cần sản lượng sạch, chỉ cần dòng lặp đi lặp lại nhiều nhất (trong ví dụ này "Kaylee 25")

+0

Xem thêm http://superuser.com/questions/383726/get-the-most-common-appearing-lines-from-file-in-linux – rogerdpack

Trả lời

5

Kaizen ~

$ sort zlist | uniq -c | sort -r | head -1| xargs | cut -d" " -f2- 

Kaylee 25 

không trợ giúp này ?

+0

Tôi không nghĩ rằng lệnh gọi 'xargs' là cần thiết đây. – chepner

+0

xargs .... của nó để ngăn chặn không gian, đồng bằng và đơn giản của nó. bạn cũng có thể sử dụng dịch nếu bạn thích !! – nsd

+0

'xargs' cũng sẽ chặn không gian liên tiếp hợp lệ. Có thể bạn sẽ cần phải loại bỏ 'xargs' và sử dụng một số phương thức khác như' sed s/^ \ s \ + [0-9] \ + \ s // ''để loại bỏ cột đếm thay vì' cắt' – Samveen

0
$ uniq -c list | sort -r | head -1 | awk '{$1=""}1' 

Kaylee 25 

Đây có phải là những gì bạn đang tìm kiếm không?

1

awk -

awk '{a[$0]++; if(m<a[$0]){ m=a[$0];s[m]=$0}} END{print s[m]}' t.lis 
+0

Giải pháp thú vị và khác biệt. – Samveen

2

IMHO, không ai trong số những câu trả lời sẽ sắp xếp các kết quả một cách chính xác. Lý do là sắp xếp, không có tùy chọn -n, tùy chọn sẽ sắp xếp như thế này "1 10 11 2 3 4", v.v. thay vì "1 2 3 4 10 11 12". Vì vậy, hãy thêm -n như vậy:

sort zlist | uniq -c | sort -n -r | head -1 

Sau đó, bạn có thể đặt ống đó vào xargs hoặc sed như được mô tả trước đó.

Các vấn đề liên quan