Eu tenho um arquivo de texto que possui várias palavras por linha.
Como posso encontrar as 12 linhas que aparecem com mais frequência no arquivo e exibi-las?
Eu 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 expandir meu conhecimento sobre comandos, seria ótimo!
Respostas:
Você pode fazer isso facilmente com comandos internos.
sort
. Precisamos disso para o próximo passo.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 anterior.sort
, que agora é ordenado em ordem inversa (r
) e com base nan
interpretação numérica ( ) dauniq
saída. Precisamos da opção numérica, pois caso contrário, o espaço na frente dos números levaria a resultados errados (consulte a ajuda do GNUsort
para obter mais informações).head
.O comando seria então:
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
:Exemplo:
Saída do primeiro comando, mas apenas selecionando 2 de
head
:Saída do segundo comando:
fonte
uniq
.sort -rn
tipos na ordem inversa usando como campo de classificação o número ao lado de cada linha produzida pelauniq -c
? Eu pensei que algo assimk1
ou algo parecido seria usador
inverte en
classifica numericamente o número produzido poruniq
. O que exatamente você quer dizer com issok1
?man
e entendi que uma sintaxe usando-k
algo deve ser usada para escolher o campo a ser classificado por #Se sua distribuição tiver logtop
Se o seu arquivo estiver em constante crescimento, como um arquivo de log, tente:
fonte