Existe alguma maneira no linux / terminal para contar, quantas vezes o char f ocorre em um arquivo de texto sem formatação?
Existe alguma maneira no linux / terminal para contar, quantas vezes o char f ocorre em um arquivo de texto sem formatação?
Respostas:
Que tal agora:
fgrep -o f <file> | wc -l
Nota: Além de muito mais fácil de lembrar / duplicar e personalizar, isso é cerca de três vezes (desculpe, edite! Estragou o primeiro teste) mais rápido que a resposta de Vereb.
\rou \ncaracteres; a tr -cd fresposta funciona para isso.
a, be c, use egrep: egrep -o 'a|b|c' <file> | wc -l.
wc -ccomo na trresposta: como grepgera linha por linha, wccontaria o final de linhas como caracteres (dobrando o número de caracteres).
\r, mas para contar, \npor que não usar wc -l?
Ainda mais rápido:
tr -cd f < file | wc -c
Hora para este comando com um arquivo com 4,9 MB e 1100000 ocorrências do caractere pesquisado:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Tempo de resposta Vereb com echo, cat, tre bcpara o mesmo arquivo:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Tempo para Rob Hruska resposta com tr, sede wcpara o mesmo arquivo:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Hora da resposta do Jefromi com fgrepe wcpara o mesmo arquivo:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a, be c: tr -cd abc < file | wc -l.
tr -cd abc < file | wc -cvez disso
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
onde o A é o personagem
Hora para este comando com um arquivo com 4,9 MB e 1100000 ocorrências do caractere pesquisado:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
cats desnecessários , fornecendo o nome do arquivo como argumento para wce tr.
stdin, mas que pode ser canalizada em vez de cated:tr -d 'A' < <file> | wc ...
Se tudo o que você precisa fazer é contar o número de linhas que contêm seu personagem, isso funcionará:
grep -c 'f' myfile
No entanto, conta várias ocorrências de 'f' na mesma linha que uma única correspondência.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Substituindo as duas ocorrências de "A" pelo seu caractere e "arquivo" pelo seu arquivo de entrada.
tr -d '\n' < file: remove novas linhassed 's/A/A\n/g: adiciona uma nova linha após cada ocorrência de "A"wc -l: conta o número de linhasExemplo:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9