Responder al comentario

Oct 09 05:24

Diferencias entre listas

Carlos Pérez me preguntó el otro día por alguna utilidad para ver las diferencias entre dos archivos, pero sin tener en cuenta si las líneas estaban ordenadas y demás.

La idea era que de dos listados de cosas quería sacar los elementos que estaban en la primera lista, pero no en la segunda. Concretamente eran listados de paquetes instalados.[1]

Esto mismo me lo he encontrado yo muchas veces, o cosas muy parecidas. Puedes ordenar las listas y hacer un diff, pero si hay elementos que están en la primera y no en la segunda y otros que están en la segunda pero no en la primera, se suele joder el tema.

Seguro que hay alguna utilidad para resolver este problema, pero como ya me lo he encontrado muchas veces y las veces que he buscado, no he encontrado nada y he tenido que hacer locuras para solucionarlo. Así que decidí hacerme un script muy chorra en python, para resolver mi problema.

Además, tenía ganas de programar algo en python, para recordar y de paso hacer pruebillas de cosas (python, codestyle, hg, convenciones, etc).

Es también para tener el típico ejemplo para crear scripts de python, con su cabecera, comentarios que tiren bien en pydoc, la licencia, normas de estilo, encoding, configuración para el vim, etc.

Bueno, si tras todo este rollo alguien quiere echarle un ojo, usarlo, tirarle piedras, copiarlo, mejorarlo o lo que sea, aquí lo tiene publicado:

http://hg.emergya.info/~jojeda/listdiff

Y si quieren directamente bajarse el repo para hacerle mejoras o su propia versión o experimentos:

$ hg clone http://hg.emergya.info/~jojeda/listdiff

Supongo que la mayoría lo sabe, pero para los que no,'hg' es el sistema de control de versiones (algo como nuestro subversion) "Mercurial" y que viene en el paquete de Ubuntu/Guadalinex "mercurial":

$ sudo apt-get install mercurial

Saludos y happy hacking ;-)

[1] El caso que comentaba:

# En una máquina (host-A)
host-A$ dpkg -l | awk '/^ii/ {print $2}' > host-B_pkgs.lst

# En otra (host-B)
host-B$ dpkg -l | awk '/^ii/ {print $2}' > host-B_pkgs.lst

# Ya en tu directorio de trabajo, con los dos archivos copiados
$ wc -l host-?_pkgs.lst  
2061 host-A_pkgs.lst  
2059 host-B_pkgs.lst  
4120 total

# Hay 2 paquetes menos en host-B
# Veamos cuales:
$ ./listdiff.py host-A_pkgs.lst host-B_pkgs.lst
ant
ant-optional

et voilá 

Responder

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><img>
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.

Más información sobre opciones de formato

By submitting this form, you accept the Mollom privacy policy.