Pergunta

Existe alguma maneira sob linux / terminal para contar, quantas vezes o caractere f ocorre em um arquivo de texto?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top