Como algunos de mis seguidores en Google Plus saben, me gusta el Rock, es mi genero musical favorito. Aunque más que simplemente "favorito", amo el rock, es una de mis pasiones. ¿Qué tiene que ver esto con GNU/Linux? Aparentemente nada, pero se me antoja escribir este artículo, y como el blog es mío, hago lo que quiero.

Aquellos lectores a quienes no les guste el rock por favor sigan leyendo, porque más allá de esta introducción este artículo no tiene nada que ver con el Rock, y sí tiene mucho que ver con GNU/Linux.



¿Cual es el propósito de este artículo? No lo sé. Supongo que es para demostrar que la línea de comandos (consola/terminal o como quieran llamarle) no sólo es para administrar servidores o hacer trabajo útil, sino que también se puede usar para tareas triviales del día a día, y que se puede combinar su uso con herramientas de entorno gráfico.

Como amante del rock, tengo un archivo de texto donde guardo los nombres de las canciones que más me gustan de la radio, con la idea de algún dia hacerme un compilado para escuchar con el teléfono o en el trabajo. El archivo tiene una línea por cada canción con el formato "[Tema] by [Intérprete]". Se preguntarán por qué comencé a guardar los nombres de mis temas favoritos en un archivo de texto plano, en lugar de utilizar una planilla u otra cosa. Porque los administradores de sistemas somos así, como trabajamos todo el día con archivos de texto plano, tenemos la tendencia a utilizar archivos de texto plano para todo.

Por ejemplo, en el comienzo del archivo se pueden ver los siguientes temas (utilizando el comando head):

[emi@hal9000 ~]$ head /tmp/classicrock
Don't Stop Believin' by Journey
Nothin But A Good Time by Poison
Dream On by Aerosmith
Still Got The Blues by Gary Moore
Lust For Life by Iggy Pop
Logical Song by Supertramp
Jump by Van Halen
Breaking The Law by Judas Priest
Life's Been Good by Joe Walsh
All Night Long by Rainbow

Hasta el momento el compilado tiene 492 temas. Utilizo el comando wc -l para contar la cantidad de líneas de un archivo de texto plano:

[emi@hal9000 ~]$ wc -l /tmp/classicrock
492 /tmp/classicrock

Pero, como todos saben, las radios tienden a repetir los temas que pasan al aire. Y como, cuando agrego a mi compilado un tema que me gusta, no recuerdo bien si ya lo había agregado antes, puede que hayan temas repetidos en el compilado. Lo que se traduce a que hayan líneas repetidas en el archivo de texto. He aquí el comando uniq al rescate. La herramienta uniq se utiliza para omitir líneas repetidas, aunque, para que funcione, las líneas repetidas deben ser adyacentes. Por lo tanto antes de filtrar es necesario ordenar las líneas del archivo, con el comando sort. Así de fácil:

[emi@hal9000 ~]$ sort /tmp/classicrock | uniq | wc -l
371

Vemos que el archivo tiene 121 líneas repetidas (si mis matemáticas no fallan 492 - 371 = 121), o sea 121 canciones repetidas. Evidentemente la radio repite mucho los temas que pasa a diario, y mi memoria funciona peor de lo que imaginaba.

Entonces voy a filtrar, y guardar en nuevo archivo, las canciones repetidas:

[emi@hal9000 ~]$ sort /tmp/classicrock | uniq > /tmp/classicrock2

Por supuesto, esto involucra ordenar alfabéticamente por tema. Se puede comprobar examinando el comienzo del nuevo archivo:

[emi@hal9000 ~]$ head /tmp/classicrock2
18 And Life by Skid Row
20th Century Boy by T - Rex
20th Century Fox by The Doors
2-4-6-8 Motorway by Tom Robinson
747 (Strangers In The Night) by Saxon
7 O'clock by The Quireboys
A Better Man by Thunder
Abracadabra by Steve Miller Band
Ace Of Spades by Motorhead

Ahora que tengo la lista de canciones sin repetir y sin soplar, me gustaría cambiar el formato de las líneas a "[Tema];[Intérprete]" para poder importarlo en una planilla de cálculo de LibreOffice Calc. Para ello utilizo una sustitución con el editor de línea de comandos sed, similar a lo que sería "Buscar y Reemplazar" en cualquier editor de texto de entorno gráfico:

[emi@hal9000 ~]$ sed "s/\ by\ /;/" /tmp/classicrock2 > /tmp/classicrock3

Lo que hace el comando anterior es buscar todas las apariciones de la cadena " by " y reemplazarlas por la cadena ";". El único problema sería que el nombre de alguna canción contenga la palabra by en el medio (lo que insertaría más de un ';' en la línea), pero afortunadamente no había ninguna con esa estructura.

Bien, ahora que tengo mi lista de canciones tal como quería, voy a abrirla con Gedit (o cualquier otro editor) para copiar el texto e importarlo desde LibreOffice Calc:

Seleccionar todo el texto del archivo (es posible utilizar el atajo Ctrl+A) y copiarlo (Ctrl+C).

By the way: que temazos encontramos en esa captura a simple vista: "Don't Stop Believin'" de Journey, "Evil Woman" de Electric Light Orchestra, "Jump" de Van Halen, etc.

Siguiendo con lo que estaba haciendo, luego de abrir LibreOffice Calc, pegar el texto copiado anteriormente. En ese momento Calc ofrece las opciones de importación. Sólo hay que indicarle que los campos están separados por punto y coma ';':

Luego de agregar los nombres de las columnas en la primera fila es posible generar un autofiltro desde "Data > Filters > AutoFilter":

Ahora es posible filtrar los temas por uno o muchos intérpretes:

Espero que les haya gustado y sirva para que aquellos usuarios novicios le pierdan un poco el miedo a la línea de comandos. Una vez que se acostumbran a usarla y aprenden los comandos básicos, se trabaja mucho más rápido que con herramientas de entorno gráfico.

Para tener la línea de comandos siempre "a mano" recomiendo instalar una consola desplegable como Yakuake (para usuarios de KDE) o Guake/Tilda (para usuarios de GNOME y otros). Estas aplicaciones permiten mostrar/ocultar una consola desplegable al presionar una tecla (como por ejemplo F12).


Tal vez pueda interesarte


Compartí este artículo