[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Buscar cadena de caracteres en archivos desde la consola



El día 30 de enero de 2011 09:31, fernando sainz
<fernandojose.sainz@gmail.com> escribió:
> El día 30 de enero de 2011 12:16, Camaleón <noelamac@gmail.com> escribió:
>> El Sat, 29 Jan 2011 18:17:46 -0430, Manuel Soto escribió:
>>
>>> El 28 de enero de 2011 13:56, Camaleón escribió:
>>>>
>>>> El Fri, 28 Jan 2011 12:06:37 -0430, Orlando Nuñez escribió:
>>>>
>>>> > Quien pueda darme una mano, hace tiempo usaba de vez en cuando un
>>>> > comando en la consola para buscar cadena de caracteres en archivos,
>>>> > pero no encuentro el comando, alguien podria ser tan amable de
>>>> > indicarme como hacerlo
>>>>
>>>> Yo tengo guardado un "one-liner" para eso:
>>>>
>>>> # buscar texto en archivos
>>>> find /ruta/a/directorio/* -type f -exec grep -H 'texto' {} \;
>>>>
>>> Hola Camaleón
>>>
>>> Con este "one-liner" crearías demasiados procesos, quien sabe si el
>>> mayor esfuerzo será crear tantos procesos; para eso esta el xargs
>>> justamente, además, mientras hace el grep sigue buscando archivos en
>>> procesos paralelos
>>
>> Probemos...
>>
>> stt008:~# time find /var/log/* -type f -exec grep -H 'ttyS0' {} \;
>> (...)
>> real    0m0.097s
>> user    0m0.048s
>> sys     0m0.060s
>>
>>
>> stt008:~# time find /var/log/* -type f | xargs grep -H "ttyS0"
>> (...)
>> real    0m0.013s
>> user    0m0.012s
>> sys     0m0.004s
>>
>>
>> stt008:~# time grep -H "ttyS0" /var/log/*
>> (...)
>> real    0m0.009s
>> user    0m0.004s
>> sys     0m0.004s
>>
>>
>> Pues sí, es el más lento de todos :-)
>>
>> Saludos,
>>
>> --
>> Camaleón
>>
>>
>>
>
> No tan deprisa forastera...  :-)
>
>
> Olvidaste  que el sistema operativo usa cache de disco....
> (Repite esas pruebas en otro orden con la máquina reiniciada...)
>
> Saludos.
>
>
> --

Ok, el tema se pone interesante

Usemos el cache de lápiz antes del de disco (análisis previo)

A) Tiempo del recorrido del(os) directorio(s) y archivos: es igual
para todos los modelos. Descartable

B) Tiempo para levantar el find: sólo en los primeros dos modelos. En
el modelo 3 sólo habrá 1 grep lo que equivale a 1 find, por lo que
podríamos pensar en despreciar el tiempo B

C) Tiempo para leer el archivo y buscar la cadena: Es igual en todos
los modelos por usar grep. Lo descartamos

D) Tiempo para levantar el grep y dar inicio y cierre del proceso:
    En el modelo 1 habrá tantos grep como archivos se encuentren
    En el modelo 2 habrá 1 grep por cada vez que la línea de comando
se haga grande. supongamos que caben el la línea de comando la palabra
grep y 10 archivos, se habría reducido a 10% las llamadas al grep. Hay
que agregar que cuando el xargs está consumiendo CPU preparando la
linea de comando y ejecutando al grep el find sigue buscando sin parar

E) Tiempo para que el find escriba el nombre del archivo en el pipe y
el xargs lo lea. bastante despreciable

F) Tiempo para levantar el xargs. Debe ser similar a 1* D

Modelo 1: c + D * n
Modelo 2: c + D * 2 + E
Modelo 3: c

Siendo:
   c = tiempo mínimo común
   n = número de archivos

Con uno o 2 archivos el modelo 1 debe ser más rápido que el modelo 2.
Si sólo quieres hacer una búsqueda recursiva el modelo 3 debe ser el
más rápido

Para hacer una operación X recursiva el modelo 2 es el más genérico y
rápido, por experiencia propia en miles de archivos, sólo que debes
manejar bien los nombres con espacios.

MS


Reply to: