Pregunta

¿Hay alguna forma en Linux/terminal de contar cuántas veces aparece el carácter f en un archivo de texto sin formato?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top