[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 15:54, Manuel Soto <mrsoto@yahoo.com> escribió:
> 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
>


Entiendo que este punto es el que cambia al estar un fichero en cache
de memoria.

No se tarda lo mismo en buscar en un archivo que ya esta en memoria
que en uno que hay que leer desde el disco.
Lo mismo pasará con un ejecutable, si el grep se invoca multiples
veces ya estará en memoria después de la primera.

Saludos.




> 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
>
>
> --
> To UNSUBSCRIBE, email to debian-user-spanish-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
> Archive: [🔎] AANLkTikKPwmX-YEMhuPZd+rZcYQg4NPZy_PYaNOTeu9-@mail.gmail.com">http://lists.debian.org/[🔎] AANLkTikKPwmX-YEMhuPZd+rZcYQg4NPZy_PYaNOTeu9-@mail.gmail.com
>
>


Reply to: