Obtenha as linhas que aparecem mais comuns em arquivos no Linux

Obtenha as linhas que aparecem mais comuns em arquivos no Linux

Eu tenho um arquivo de texto que contém várias palavras por linha.
Como posso encontrar as 12 linhas que aparecem mais frequentemente no arquivo e exibi-las?
Não sou muito bom com comandos de script.

Se eu pudesse obter o comando e uma explicação para entender como usá-lo e ampliar meu conhecimento sobre comandos seria ótimo!

Responder1

Você pode fazer isso facilmente com comandos integrados.

  • Alimente o conteúdo do arquivo sort. Precisamos disso para a próxima etapa.
  • Isso vai para uniq -c. Contará a ocorrência única de cada linha. Se as linhas semelhantes não fossem adjacentes, isso não teria funcionado sem a classificação antes.
  • Em seguida, alimente-o para outro sort, que agora classifica em ordem inversa ( r) e com base na ninterpretação numérica ( ) da uniqsaída. Precisamos da opção numérica, caso contrário, o espaço na frente dos números levaria a resultados errados (vejasortAjuda do GNUpara 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 canalizar 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 selecionando apenas 2 de head:

6 Hello there!
3 Look at me!

Saída do segundo comando:

Hello there!
Look at me!

Responder2

Se sua distro tiverlogtop

cat your_file | logtop

Se o seu arquivo estiver crescendo constantemente, como um arquivo de log, tente:

tail -f your_log | logtop

informação relacionada