Pipes en UNIX / Linux

bannerg100

pipes

En el posting anterior introduje el comando GREP perteneciente al Shell UNIX / Linux. El Shell es un programa especial utilizado como una interfaze entre el usuario y el kernel o núcleo del Sistema Operativo. De modo general, el Kernel es un programa que se carga en memoria al momento en el que el PC se inicia, y es responsable de administrar el sistema hasta que apagamos la computadora, entre sus funciones está, crear y controlar procesos, gestionar la memoria y controlar el sistema de archivos. En otras palabras, constituye el núcleo del sistema operativo. El shell es el intérprete de órdenes u comandos de un sistema Unix / Linux. No hay que confundir el shell con el sistema operativo. El  kernel es el núcleo del sistema operativo y el shell es una interface que nos proporciona utilidades de trabajo y permite establecer una relación con el núcleo. Es decir, el shell reconoce una serie de órdenes, las interpreta y lanza los procesos necesarios para su realización.GREP es poderoso pero como comando es solo dirijido a alcanzar un proposito, busqueda de cadenas de caracteres en un archivo de texto.En la abrumadora mayoria de las ocasiones que abordamos un problema bioinformático el uso de un solo comando no es suficiente, en definitiva cada comando en el sistema operativo fué implementado para resolver solo una tarea bien definida. No podemos implementar un algoritmo, por simple que sea, con el uso de un solo comando del Shell de Unix / Linux. El ambiente del Shell de UNIX/ Linux es ideal para resolver muchas tareas  eficazmente bioinformáticas porque provee cientos de poderosos comandos que pueden ser usados en conjunto para resolver tareas complejas con un mínimo esfuerzo de programación. El Shell no es un lenguaje de programación, es solo un ambiente que provee el Sistema Operativo para el uso de los recursos de la computadora a través del uso de comandos, los mismos comandos que podemos combinar en scripts para abordar y resolver tareas bioinformáticas. Para resolver tareas complejas en el Shell se impone otro método de trabajo, un método en el que un número definido de comandos sean usados en combinación para implementar un algoritmo o serie de pasos. Esto es una tarea relativamente simple en el Shell de Unix, o sea es relativamente simple combinar coherentemente una serie de comandos para alcanzar un proposito complejo. Muchos comandos de Linux pueden ser usados de modo concertado e interconectado donde el output o resultado  del comando que precede es utilizado como input o entrada del comando que sigue, esto es lo que llamamos en Unix / Linux  “piping”. Llamamos una tuberia o pipe, personalmente prefiero denominarlo pipe, a una combinación de comandos del Shell trabajando en conjunto y concertadamente, uno tras otro con el fin de alcanzar un propósito computacional. En un pipe el output de un comando se convierte en el input de otro comando, o sea que  pipe es direccionalmente “one way”. Cuando usamos un Shell de  UNIX / Linux , un pipe es especificado por el operador | ; o sea una barra vertical entre la secuencia de dos comandos.

Un ejemplo trivial del uso del pipe en Linux sería algo como lo siguiente:

cat * | grep “Linux” | grep -v “UNIX” | wc -l

En el primero de los 4 cuatros segmentos o secciones separadas por barras verticales, el comando cat lee y pone junto el contenido de todos los archivos en el directorio de trabajo. El * o  asterisco es un wildcard que representa todos los elementos en el directorio, recuerdan los wildcards del DOS?. El primer pipe manda el output del comando cat como input hacia el comando grep , que retorna solo las lineas que contienen la expresión Linux . Este segundo pipe manda estas lineas como input a otro comando grep con la opción -v , este grep elimina las lineas que contienen la expresión UNIX. Finalmente, el tercer pipe manda este output a wc -1, el cual cuenta el número de lineas y escribe el resultado a la pantalla. En mi próximo posting espero presentarles algunos pipes que resuelven problemas bioinformáticos de manera simple. Espero que este posting haya presentado de modo claro y sencillo , como se pueden poner a trabajar en conjunto varios comandos del Shell de UNIX / Linux usando la estructura de pipes. Nuevamente, este estilo y  modo de trabajo en Linux es simple y facil de entender . No hay nada exotérico ni misterioso, en combinar comandos en la consola para lograr scripts que resuelvan problemas de variada naturaleza. Como dice mi amigo Robert para todo, “no big deal”.

One Response to Pipes en UNIX / Linux

  1. txema says:

    buenas, tengo una duda:
    Si recibo la entrada de un puerto, puedo mandar la luego a un programa?
    Por ejemplo: cu -l /dev/ttyACM0 > programa.c ó cu -l /dev/ttyACM0 | grep programa .
    para luego tratar el valor recibido.
    Muchas gracias.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: