Tengo un montón de archivos de registro. Necesito averiguar cuántas veces ocurre una cadena en todos los archivos.
grep -c string *
devoluciones
...
file1:1
file2:0
file3:0
...
Usando una tubería pude obtener solo archivos que tienen una o más ocurrencias:
grep -c string * | grep -v :0
...
file4:5
file5:1
file6:2
...
¿Cómo puedo obtener solo el recuento combinado? (Si vuelve file4:5, file5:1, file6:2
, quiero volver a 8.)
grep file1 file2 --options
Respuestas:
fuente
grep -c string<*
solo reemplazando el espacio con un menor que.grep -o
ywc -l
lo hace. Sin embargo, cat es más rápido en casos como la pregunta original.Esto funciona para múltiples ocurrencias por línea:
fuente
grep -o string * --exclude-dir=some/dir/one/ --exclude-dir=some/dir/two | wc -l
.grep -ioR string * | wc -l
es lo que uso para hacer una búsqueda que no distingue entre mayúsculas y minúsculas, recursiva, solo coincidentegrep -rc test . | awk -F: '$NF > 0 {x+=$NF; $NF=""; print} END{print "Total:",x}'
contará múltiples ocurrencias en una línea
fuente
grep -oh "... my that curry was strong" * >> wc
:)En lugar de usar -c, solo conéctelo a wc -l.
Esto enumerará cada aparición en una sola línea y luego contará el número de líneas.
Sin embargo, esto perderá instancias en las que la cadena ocurra más de 2 veces en una línea.
fuente
Una de las raras aplicaciones útiles de
cat
.fuente
Algo diferente a todas las respuestas anteriores:
fuente
Puede agregar
-R
para buscar de forma recursiva (y evitar usar cat) e-I
ignorar los archivos binarios.fuente
Solución obligatoria de AWK:
Sin embargo, tenga cuidado si sus nombres de archivo incluyen ":".
fuente
La solución AWK que también maneja nombres de archivos incluyendo dos puntos:
Tenga en cuenta que este método todavía no encuentra múltiples ocurrencias
string
en la misma línea.fuente
Si desea un número de ocurrencias por archivo (ejemplo para la cadena "tcp"):
Salida de ejemplo:
Explicación:
grep -RIci NEEDLE .
- busca la AGUJA de cadena recursivamente del directorio actual (siguiendo los enlaces simbólicos), ignorando los binarios, contando el número de ocurrencias, ignorando las mayúsculas y minúsculasawk ...
- este comando ignora los archivos con cero apariciones y formatea líneassort -hr
- ordena las líneas en orden inverso por números en la primera columnaPor supuesto, también funciona con otros comandos grep con la opción
-c
(cuenta). Por ejemplo:fuente
Puede utilizar un simple
grep
para capturar la cantidad de ocurrencias de manera efectiva. Usaré la-i
opción para asegurarme de queSTRING/StrING/string
me capturen correctamente.Línea de comando que da el nombre de los archivos:
Línea de comando que elimina los nombres de archivo e imprime 0 si hay un archivo sin ocurrencias:
fuente
variante recursiva corta :
fuente
Solución única de Grep que probé con grep para Windows:
Esta solución contará todas las ocurrencias, incluso si hay múltiples en una línea.
-r
busca recursivamente en el directorio,-o
"mostrará solo la parte de una línea que coincide con PATTERN": esto es lo que divide múltiples ocurrencias en una sola línea y hace que grep imprima cada coincidencia en una nueva línea; luego canalice esos resultados separados por una nueva línea nuevamente en grep-c
para contar el número de ocurrencias utilizando el mismo patrón.fuente
Aquí hay una forma alternativa de AWK más rápida que grep de hacer esto, que maneja múltiples coincidencias de
<url>
por línea, dentro de una colección de archivos XML en un directorio:Esto funciona bien en casos donde algunos archivos XML no tienen saltos de línea.
fuente
Otro oneliner que utiliza funciones básicas de línea de comandos que manejan múltiples ocurrencias por línea.
fuente