
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 nan
interpretação numérica ( ) dauniq
saída. Precisamos da opção numérica, caso contrário, o espaço na frente dos números levaria a resultados errados (vejasort
Ajuda 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