Obtenha as linhas de apresentação mais comuns do arquivo no Linux

10

Eu tenho um arquivo de texto que tem várias palavras por linha.
Como posso encontrar as 12 linhas mais frequentes no arquivo e exibi-las?
Eu não sou muito bom com comandos de script.

Se eu conseguisse o comando e uma explicação para poder entender como usá-lo e expandir meu conhecimento sobre comandos, seria ótimo!

    
por Jim 29.01.2012 / 21:02

2 respostas

20

Você pode fazer isso facilmente com comandos internos.

  • Alimente o conteúdo do arquivo sort . Precisamos disso para o próximo passo.
  • Isso vai para uniq -c . Contará a ocorrência única de cada linha. Se as linhas semelhantes não forem adjacentes, isso não teria funcionado sem a classificação antes.
  • Em seguida, alimente-o com outro sort , que agora classifica em ordem inversa ( r ) e com base na interpretação numérica ( n ) da saída uniq . Precisamos da opção numérica, pois, de outra forma, o espaço na frente dos números levaria a resultados errados (veja Ajuda do GNU sort para mais).
  • Finalmente, mostre apenas as primeiras doze linhas com head .

O comando seria então:

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

A saída aqui contém a contagem real das ocorrências.

Para obter apenas a lista bruta de linhas, você pode enviar a saída para sed :

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

Exemplo:

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!

Saída do primeiro comando, mas apenas selecionando 2 de head :

6 Hello there!
3 Look at me!

Saída do segundo comando:

Hello there!
Look at me!
    
por 29.01.2012 / 21:34
2

Se sua distro tiver logtop

cat your_file | logtop

Se o seu arquivo está em constante crescimento, como um arquivo de log, tente:

tail -f your_log | logtop
    
por 31.03.2012 / 21:27