¿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.
\r
o \n
caracteres; la tr -cd f
respuesta funciona para eso.
a
, b
y c
, utilice egrep
: egrep -o 'a|b|c' <file> | wc -l
.
wc -c
como en la tr
respuesta: dado que las grep
salidas línea por línea, wc
contarí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
, 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
a
, b
y c
: tr -cd abc < file | wc -l
.
tr -cd abc < file | wc -c
en 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
cat
s innecesarios , dando el nombre de archivo como argumento para wc
y tr
.
stdin
, pero eso se puede canalizar en lugar de cat
tr -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