2009/03/06 |

Tengo un archivo llamado ‘misc/bookmarks.txt’ en el cuál, a lo largo de los años, he guardado los URLs de sitios, artículos, posts, etc. que me parecen interesantes. El formato del archivo es lo más sencillo posible: un URL por línea. Y nada más.

El problema es que ahora tengo un archivo con más de mil líneas, del cuál no puedo sacar nada de información. Son mil links, y nada más. No está estructurado, es imposible categorizar los URLs, no tengo ni la más mínima idea de lo que representa cada línea (excepto por la poca información que la misma URL me pueda dar), etc.

Así que he decidido empezar un pequeño proyectito que me permita organizar los links de manera más eficiente. El primer paso es purgar el archivo, de tal manera que pueda estar seguro que cada línea representa un URL que no se repite en el resto del archivo. Para ello, escribí la siguiente línea:

sed 's/http:\/\/www\./http:\/\//' misc/bookmarks.txt | sort | uniq -d

Como dije anteriormente, el propósito de esta línea es detectar URLs repetidas. Para ello, consideré el hecho de que podría tener tanto ‘http://www.example.com/foo’ como ‘http://example.com/foo’ guardadas en el archivo, y quisiera que ambas fueran tratadas como una única URL. La expresión regular pasada a sed sirve ese propósito. La salida es pasada al comando sort, el cuál ordena las líneas alfabéticamente. Después, la salida es pasada a uniq, cuyo propósito en esta vida es precisamente detectar líneas repetidas. La opción -d hará que uniq imprima las líneas repetidas, en vez de imprimir las líneas diferentes. El comando anterior me arrojó alrededor de quince líneas, un número más bajo del que esperaba. Después, sólo tuve que editar el archivo para borrar esas líneas.

Líneas de comandos parecidas fueron utilizadas para otros casos, como por ejemplo detectar ‘http://example.com’ y ‘http://example.com/’ (noten la diagonal al final), o ‘http://example.com/bar/’ y ‘http://example.com/bar/index.html’.