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.
\r
ou \n
caracteres; a tr -cd f
resposta funciona para isso.
a
, b
e c
, use egrep
: egrep -o 'a|b|c' <file> | wc -l
.
wc -c
como na tr
resposta: como grep
gera linha por linha, wc
contaria o final de linhas como caracteres (dobrando o número de caracteres).
\r
, mas para contar, \n
por 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
, tr
e bc
para o mesmo arquivo:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Tempo para Rob Hruska resposta com tr
, sed
e wc
para o mesmo arquivo:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Hora da resposta do Jefromi com fgrep
e wc
para o mesmo arquivo:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a
, b
e c
: tr -cd abc < file | wc -l
.
tr -cd abc < file | wc -c
vez 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
cat
s desnecessários , fornecendo o nome do arquivo como argumento para wc
e tr
.
stdin
, mas que pode ser canalizada em vez de cat
ed: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