En este ejemplo tenemos dos ficheros, en uno tenemos una lista de usuarios, en el segundo tenemos otra lista de usuarios donde existen algunas coincidencias entre ambos. El objetivo es crear un fichero nuevo donde existan solamente las coincidencias del fichero 1 en el fichero 2.
El formato del fichero1 es:
lilibet liliana
El formato del fichero2 es:
brians:Z3wW4ZPHNTNV2 alain:Hc9QJlKxDXyO. lilibet:uUIoYbAUJ6Ecc maria:zNge5unPZrnzI liliana:o0EbbZXD4gC8M
Nuestro objetivo es recuperar las líneas del fichero2 que coinciden con el fichero1.
Muchas podrían ser las posibilidades de lograr nuestro objetivo, pero voy a utilizar el comando grep para practicar su uso.
Vamos paso a paso.
si ejecutamos
grep lilibet fichero2 > fichero3
tenemos el resultado en fichero3
lilibet:uUIoYbAUJ6Ecc
o sea que recuperamos el dato para el usuario lilibet.
Para el caso de un solo usuario, con el comando anterior podríamos resolver, pero que tal si los ficheros tienen miles de usuarios por línea ?
Si con el comando grep podemos recuperar la línea correspondiente a un parametro previamente asignado, si repetimos este comando para cada uno de las líneas del fichero1 de forma automática y luego para cada salida adicionamos el resultado en un fichero3 podríamos recuperar la información que necesitamos.
Básicamente lo que haremos será recorrer el fichero1 de arriba hacia abajo, almacenar cada línea en una variable y luego pasar esta variable como patrón del comando grep al fichero2. Al final de la línea del comando redireccionamos el resultado a un fichero3.
Para esto crearemos un fichero limpia.sh que tendrá permisos 750.
limpia.sh:
#!/bin/bash
for i in `cat fichero1`
do
grep "${i}:" fichero2 >> fichero3
done
donde:
"${i}:"
Es el patrón de búsquda. ${i} es la variable que irá cambiando de valor según las líneas del fichero1, los : forman parte del patrón y ayudan a la hora de hacer la búsqueda. Las comillas dobles enmarcan el patrón de búsqueda y hacen que la variable sea válida dentro del patrón.
>>
Permite adicionar al final de línea el resultado de cada una de las coincidencias encontradas al fichero3.
De esta forma, al ejecutar el script, el valor del fichero3 debe ser:
lilibet:uUIoYbAUJ6Ecc liliana:o0EbbZXD4gC8M
Marzo 21, 2008 a las 7:29 pm |
soy una estudiante de ing informatica y quiero saber algo mas sobre el comando grep si saben algo de el escribanme a mi email teffixitas_9@hotmail.com
xao!
TeffixitaZ ♥
Febrero 10, 2009 a las 2:05 pm |
Muchas gracias por la ayuda, me sirvio mucho
Febrero 11, 2009 a las 2:15 pm |
Me di cuenta que tu script solo sirve para buscar strings que no incluyan puntos:
lilibet
liliana
Pero si existe un punto en alguna de esas cadenas de caracteres solo busca el ultimo string, es decir
1.2.3.4
2.3.4.5
3.4.5.6
Solo busca 3.4.5.6 ???
Porqe sucede eso???
como lo puedo solucionar, pues necesito sacar informacion de ips en un archivo txt.