2013-06-04 16 views
5

Supponiamo che io abbia un file simile a come seguireTrova linea più frequente nei file in bash

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

Vorrei trovare la linea più ripetuta, l'uscita deve essere solo la linea.

io ve provato

sort list | uniq -c 

ma ho bisogno di uscita pulita, solo la linea più ripetuta (in questo esempio "Kaylee 25")

+0

Vedere anche http://superuser.com/questions/383726/get-the-most-common-appearing-lines-from-file-in-linux – rogerdpack

risposta

5

Kaizen ~

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

Kaylee 25 

fa questo aiuto ?

+0

Non penso che la chiamata a 'xargs' sia necessaria Qui. – chepner

+0

xargs .... è per sopprimere gli spazi, è semplice e semplice. potresti anche usare translate se ti è piaciuto !! – nsd

+0

'xargs' sopprimerà anche spazi consecutivi validi. Probabilmente dovrai rimuovere 'xargs' e usare un altro metodo come' sed s/^ \ s \ + [0-9] \ + \ s // ''per rimuovere la colonna count invece di' cut' – Samveen

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

Kaylee 25 

È questo quello che stai cercando?

1

awk -

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

Soluzione interessante e diversa. – Samveen

2

IMHO, nessuna di queste risposte ordinerà correttamente i risultati. Il motivo è che, senza l'opzione -n, l'ordinamento verrà ordinato come questo "1 10 11 2 3 4", ecc. Anziché "1 2 3 4 10 11 12". Quindi, aggiungere -n in questo modo:

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

È quindi possibile, naturalmente, che il tubo sia a xargs o sed come descritto in precedenza.

Problemi correlati