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 anterior.
- Em seguida, alimente-o para outro
sort
, que agora é ordenado em ordem inversa ( r
) e com base na n
interpretação numérica ( ) da uniq
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).
- Por fim, mostre apenas as doze primeiras 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 apenas selecionando 2 de head
:
6 Hello there!
3 Look at me!
Saída do segundo comando:
Hello there!
Look at me!