Ottieni le righe visualizzate più comuni dal file in Linux


11

Ho un file di testo che contiene varie parole per riga.
Come posso trovare le 12 righe visualizzate più frequentemente nel file e visualizzarle?
Non sono molto bravo con i comandi di scripting.

Se potessi ottenere il comando e una spiegazione in modo da poter capire come usarlo ed espandere la mia conoscenza dei comandi sarebbe fantastico!


Risposte:


21

Puoi farlo facilmente con i comandi integrati.

  • Alimenta il contenuto del file sort. Ne abbiamo bisogno per il prossimo passo.
  • Questo va a uniq -c. Conterà l'occorrenza unica di ciascuna riga. Se le linee simili non sono adiacenti, questo non avrebbe funzionato senza l'ordinamento prima.
  • Quindi, alimentalo a un altro sort, che ora ordina in ordine inverso ( r) e basato sull'interpretazione numerica ( n) uniqdell'output. Abbiamo bisogno l'opzione numerica poiché, altrimenti, lo spazio davanti ai numeri porterebbe a risultati errati (vedi GNU sortaiuto s' per maggiori informazioni).
  • Infine, mostra solo le prime dodici righe con head.

Il comando sarebbe quindi:

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

L'output qui contiene il conteggio effettivo delle occorrenze.

Per ottenere solo l'elenco di righe non elaborato, puoi reindirizzare l'output a sed:

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

Esempio:

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!

Uscita dal primo comando, ma selezionando solo 2 da head:

6 Hello there!
3 Look at me!

Uscita dal secondo comando:

Hello there!
Look at me!

1
Devi ordinarlo prima dell'uso uniq.
cYrus,

@slhck: Grazie! Una domanda: i sort -rntipi in ordine inverso utilizzando come campo di ordinamento il numero accanto a ciascuna riga prodotta da uniq -c? Pensavo k1che sarebbe stato usato qualcosa del genere o qualcosa del genere
Jim

@Jim esattamente. rinverte e nordina numericamente il numero prodotto da uniq. Cosa intendi esattamente con k1?
slhck,

@slhck: stavo cercando di capire questi comandi usando mane ho capito che una sintassi usando -kqualcosa doveva essere usata per scegliere il campo da ordinare
Jim

@cYrus: qual è il caso limite per cui prima è necessario un ordinamento?
Jim

3

Se la tua distribuzione ha il logtop

cat your_file | logtop

Se il tuo file è in costante crescita, come un file di registro, prova:

tail -f your_log | logtop
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.