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
Perpetrado el 17 de febrero de 2013 por una IN (Inteligencia Natural), la mia, con cierto esfuerzo.
Archivado en categoría(s) GNU/Linux
Deja una respuesta