¿Hay alguna manera en Linux / terminal para contar, cuántas veces se produce el char f en un archivo de texto sin formato?
¿Hay alguna manera en Linux / terminal para contar, cuántas veces se produce el char f en un archivo de texto sin formato?
Respuestas:
Qué tal esto:
fgrep -o f <file> | wc -l
Nota: Además de ser 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.
\ro \ncaracteres; la tr -cd frespuesta funciona para eso.
a, by c, utilice egrep: egrep -o 'a|b|c' <file> | wc -l.
wc -ccomo en la trrespuesta: dado que las grepsalidas línea por línea, wccontarían el final de las líneas como caracteres (por lo tanto, se duplica el número de caracteres).
\r, pero para contar \n¿por qué no solo usar wc -l?
aun más rápido:
tr -cd f < file | wc -c
Tiempo para este comando con un archivo con 4.9 MB y 1100000 ocurrencias del carácter buscado:
real 0m0.089s
user 0m0.057s
sys 0m0.027s
Tiempo de respuesta Vereb con echo, cat, try bcpara el mismo archivo:
real 0m0.168s
user 0m0.059s
sys 0m0.115s
Es hora de que Rob Hruska responda con tr, sedy wcpara el mismo archivo:
real 0m0.465s
user 0m0.411s
sys 0m0.080s
Es hora de que Jefromi responda con fgrepy wcpara el mismo archivo:
real 0m0.522s
user 0m0.477s
sys 0m0.023s
a, by c: tr -cd abc < file | wc -l.
tr -cd abc < file | wc -cen su lugar
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
cats innecesarios , dando el nombre de archivo como argumento para wcy tr.
stdin, pero eso se puede canalizar en lugar de cattr -d 'A' < <file> | wc ...
Si todo lo que necesitas hacer es contar la cantidad de líneas que contienen tu personaje, esto funcionará:
grep -c 'f' myfile
Sin embargo, cuenta múltiples ocurrencias 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 su personaje y "archivo" con su archivo de entrada.
tr -d '\n' < file: elimina nuevas líneassed '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íneasEjemplo:
$ cat file
abcdefgabcdefgababababbbba
1234gabca
$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9