Técnicamente esto podría considerarse un sh / bash / etc. pregunta de programación, así que creo que tiene validez en cualquier lugar.
Rob Hruska
@Rob Hruska: sí, también creo que es una programación bash ... @abrashka: ¡la respuesta para su primera y segunda pregunta es "NO"!
cupakob
Respuestas:
178
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.
Este no funciona si necesita contar \ro \ncaracteres; la tr -cd frespuesta funciona para eso.
bjnord
3
Para contar varios caracteres, por ejemplo a, by c, utilice egrep: egrep -o 'a|b|c' <file> | wc -l.
Skippy le Grand Gourou
Además, tenga cuidado de NO usar 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).
Skippy le Grand Gourou
@bjnord Ok \r, pero para contar \n¿por qué no solo usar wc -l?
Skippy le Grand Gourou
67
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:
Respuestas:
Qué tal esto:
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.
fuente
\ro\ncaracteres; latr -cd frespuesta funciona para eso.a,byc, utiliceegrep:egrep -o 'a|b|c' <file> | wc -l.wc -ccomo en latrrespuesta: dado que lasgrepsalidas 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 usarwc -l?aun más rápido:
Tiempo para este comando con un archivo con 4.9 MB y 1100000 ocurrencias del carácter buscado:
Tiempo de respuesta Vereb con
echo,cat,trybcpara el mismo archivo:Es hora de que Rob Hruska responda con
tr,sedywcpara el mismo archivo:Es hora de que Jefromi responda con
fgrepywcpara el mismo archivo:fuente
a,byc:tr -cd abc < file | wc -l.tr -cd abc < file | wc -cen su lugardonde la A es el personaje
Tiempo para este comando con un archivo con 4.9 MB y 1100000 ocurrencias del carácter buscado:
fuente
cats innecesarios , dando el nombre de archivo como argumento parawcytr.stdin, pero eso se puede canalizar en lugar decattr -d 'A' < <file> | wc ...Si todo lo que necesitas hacer es contar la cantidad de líneas que contienen tu personaje, esto funcionará:
Sin embargo, cuenta múltiples ocurrencias de 'f' en la misma línea que una sola coincidencia.
fuente
tr -d '\n' < file | sed 's/A/A\n/g' | wc -lReemplazar 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:
fuente