Contagem ocorrências de um caractere em arquivo de texto simples
Pergunta
Existe alguma maneira sob linux / terminal para contar, quantas vezes o caractere f ocorre em um arquivo de texto?
Solução
Como sobre isto:
fgrep -o f <file> | wc -l
Nota: Além de muito mais fácil lembrar / duplicar e personalização, isto é cerca de três vezes (desculpe, editar estragou o primeiro teste!) Mais rápido do que a resposta de Vereb
.Outras dicas
ainda mais rápido:
tr -cd f < file | wc -c
Tempo para este comando com um arquivo com 4,9 MB e 1100000 ocorrências da procurou personagem:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Time for Vereb resposta com echo
, cat
, tr
e bc
para o mesmo arquivo:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Time for Rob Hruska resposta com tr
, sed
e wc
para o mesmo arquivo:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Time for Jefromi resposta com fgrep
e wc
para o mesmo arquivo:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
onde o A é o personagem
O tempo para este comando com um arquivo com 4,9 MB e 1100000 ocorrências de caráter procurou:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Se tudo que você precisa fazer é contar o número de linhas que contêm o seu personagem, isso vai funcionar:
grep -c 'f' myfile
No entanto, ele conta várias ocorrências de 'f' na mesma linha como um único jogo.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Substituir as duas ocorrências de "A" com o seu personagem, e "arquivo" com o seu arquivo de entrada.
-
tr -d '\n' < file
: Remove novas linhas -
sed 's/A/A\n/g
: adiciona uma nova linha após cada ocorrência de "A" -
wc -l
: contagem do número de linhas
Exemplo:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9