Danielside

informática softwarelibre divagaciones música

Elegancia en la línea de comandos

Me llama mucho la atención que hay misiones sencillas que son enormemente complicadas cuando las hacemos mediante la interfaz gráfica, sea cual sea. No digo que haya que hacer todo con comandos, cada misión tiene su herramienta, pero sí que una de las grandes ventajas de Linux es que con un par de comandos puedes hacer tareas que a golpe de ratón serían muy tediosas.

Supongamos que tenemos un archivo con registros (líneas) y campos. No nos interesan todos los campos y queremos tener un archivo final que contenga el primer y segundo campo junto con los tres últimos. Una línea de este archivo es tal que así:

la2:770000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:201:203:531

Es una línea para sintonizar un canal de televisión y en el fichero hay tantas como canales. Si por lo que sea nos interesan solo los dos primeros campos (nombre de canal y frecuencia) y los tres últimos (PIDs de los programas) estaría un buen rato seleccionado, copiando y pegando con un editor de textos y estaría sujeto a error.

Ahora hacemos magia:

cut -d ‘:’ -f 1,2 channels > channels_1

Esto ha seleccionado primer y segundo campo indicando que el separador de campo es : y lo ha escrito en channels_1

cut -d ‘:’ -f 1,11-13 channels > channels_2

Esto ha hecho lo mismo pero seleccionando el primer campo (es importante, este campo es la clave para luego unir) junto con los campos del 11 al 13.

join -t ‘:’ channels_1 channels_2 > channels_min

Esto ha unido, utilizando el : como separador de campo, los dos archivos y ha escrito el resultado en channels_min. La línea en concreto a las que nos referíamos al principio queda:

la2:770000000:201:203:531


Archivado en categoría(s) GNU/Linux

Enlace permanente



Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *