Contar las apariciones de un carácter en un archivo de texto sin formato
Pregunta
¿Hay alguna forma en Linux/terminal de contar cuántas veces aparece el carácter f en un archivo de texto sin formato?
Solución
¿Qué tal esto?
fgrep -o f <file> | wc -l
Nota: Además de mucho más fácil de recordar / duplicar y personalizar, esto es aproximadamente tres veces (lo siento, editar! falló la primera prueba) más rápido que la respuesta de Vereb.
Otros consejos
aun más rápido:
tr -cd f < file | wc -c
Hora de este comando con un archivo de 4,9 MB y 1100000 apariciones del carácter buscado:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Es hora de que Vereb responda con echo
, cat
, tr
y bc
para el mismo archivo:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Es hora de que Rob Hruska responda con tr
, sed
y wc
para el mismo archivo:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Es hora de que Jefromi responda con fgrep
y wc
para el mismo archivo:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
echo $(cat <file> | wc -c) - $(cat <file> | tr -d 'A' | wc -c) | bc
donde la A es el personaje
Tiempo para este comando con un archivo con 4.9 MB y 1100000 ocurrencias del carácter buscado:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Si todo lo que necesita hacer es contar la cantidad de líneas que contienen su personaje, esto funcionará:
grep -c 'f' myfile
Sin embargo, cuenta múltiples apariciones de 'f' en la misma línea que una sola coincidencia.
tr -d '\n' < file | sed 's/A/A\n/g' | wc -l
Reemplazar las dos ocurrencias de " A " con tu personaje y " archivo " con su archivo de entrada.
-
tr -d '\n' < file
: elimina las nuevas líneas -
sed 's/A/A\n/g
: agrega una nueva línea después de cada aparición de " A " -
wc -l
: cuenta el número de líneas
Ejemplo :
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9