Eu tinha um comando que funcionaria através de um arquivo de texto, contaria todas as ocorrências das palavras e as imprimiria assim:
user@box $˜ magic-command-i-forgot | with grep | and awk | sort ./textfile.txt
66: the
54: and
32: I
16: unix
12: bash
5: internet
3: sh
1: GNU/Linux
Portanto, ele não pesquisa linha por linha, mas palavra por palavra, e o faz por todas as palavras, não apenas por uma palavra. Eu o encontrei em algum lugar nas internets há muito tempo, mas não consigo encontrar nem lembrar.
tr -s
para lidar com vários espaços, especialmente quando encontrar recuo.-g
(--general-numeric-sort
) opção desort
pode ser preferível em alguns casos. Por exemplosort -n
, manterá10\n1 4
como está, tratando1 4
como14
, enquantosort -g
tratará corretamente como1 4\n10
.echo "Lorem ipsum dolor sit sit amet et cetera." | tr ' ' '\n' | grep -v "^$" | sort | uniq -c | sort -bnr
Observe que eu sou iniciante, por isso posso estar errado, sinta-se à vontade para aconselhar.Para dividir a entrada em palavras, substitua qualquer caractere que considere um separador de palavras por uma nova linha.
fonte
Não usando grep e awk, mas isso parece fazer o que você deseja:
fonte
set -f
) e tratar a pontuação como parte das palavras (que podem ser corrigidas de maneira desagradável ao adicionar caracteres de pontuaçãoIFS
- boa sorte, tentando suportar conjuntos de caracteres não ASCII). Isso não será bom com arquivos de entrada muito grandes, pois ele armazena o arquivo inteiro na memória (sort
é mais inteligente).Eu acredito que você está atrás de algo assim?
é claro que você também pode fazer o mesmo
awk
:)fonte
Usando
awk/sort/uniq
solução:fonte
classifica em ascensão após dividir o arquivo em palavras.
O grep simples será encontrado
fish
emfisheye
, então você precisa aprimorar o comando grep para evitar correspondências parciais.Demora cerca de 3s para um arquivo de texto de 25k em uma máquina com o passar do tempo, HDD clássico (IDE).
Para arquivos maiores ou operações realizadas com frequência, uma abordagem de mapa de hash seria melhor, mas para um trabalho raramente executado ou apenas para arquivos menores, pode ser suficiente.
fonte