2013-06-04 15 views
5

Załóżmy, że mam plik podobny do jak postępowaćZnajdź najczęstszą linii w pliku w bash

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

chciałbym znaleźć najbardziej powtarzające linię, wyjście musi być tylko linia.

I ve wypróbowany

sort list | uniq -c 

ale muszę czyste wyjście, tylko najbardziej powtarzające linię (w tym przykładzie "Kaylee 25")

+0

Zobacz także http://superuser.com/questions/383726/get-the-most-common-appearing-lines-from-file-in-linux – rogerdpack

Odpowiedz

5

Kaizen ~

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

Kaylee 25 

czyni tę pomoc ?

+0

Nie sądzę, że konieczne jest połączenie z 'xargs' tutaj. – chepner

+0

xargs .... jego do stłumienia przestrzeni, jej proste i proste. możesz również użyć translate if you liked !! – nsd

+0

'xargs' będzie również tłumić ważne kolejne spacje. Prawdopodobnie będziesz musiał usunąć 'xargs' i użyć innej metody, jak' sed s/^ \ s \ + [0-9] \ + \ s // '', aby usunąć kolumnę zliczania zamiast' cut' – Samveen

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

Kaylee 25 

Czy tego właśnie szukasz?

1

awk -

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

Ciekawe i inne rozwiązanie. – Samveen

2

IMHO, żadna z tych odpowiedzi będzie sortować wyniki poprawnie. Powodem jest to, że sortowanie bez opcji -n będzie sortować w ten sposób "1 10 11 2 3 4" itd. Zamiast "1 2 3 4 10 11 12". Więc dodać -n tak:

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

Następnie można, oczywiście, że do rury albo xargs lub sed jak opisano wcześniej.

Powiązane problemy