introducción a unix / linux - parte 2 : manejando...

65
I NTRODUCCIÓN A UNIX /L INUX PARTE 2: MANEJANDO DATOS DE NGS Jérôme Verleyen Unidad Universitaria de Secuenciación Masiva y Bioinformática Instituto de Biotecnologia- UNAM [email protected] 1-4 de agosto 2017 Introducción al manejo y análisis de datos de secuenciación masiva de ADN JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX /LINUX 1-4 DE AGOSTO 2017 1 / 64

Upload: others

Post on 05-Aug-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

INTRODUCCIÓN A UNIX / LINUXPARTE 2 : MANEJANDO DATOS DE NGS

Jérôme Verleyen†

†Unidad Universitaria de Secuenciación Masiva y BioinformáticaInstituto de Biotecnologia- UNAM

[email protected]

1-4 de agosto 2017Introducción al manejo y análisis de

datos de secuenciación masiva de ADN

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 1 / 64

Page 2: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

ÍNDICE

1 ALGO MÁS COMPLEJOComandos de archivosRegular ExpressionManipulación de textoCompresión/Descompresión

2 REFERENCIAS

3 AL FINAL..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 2 / 64

Page 3: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

OBJETIVO

Vimos como manejar los archivos y los derechos.De igual manera, las redirecciones, y el famoso |.

Aprender comandos para manipular contenido.Descubrir las ”Regular Expression”.Manipular archivos de textos.Manejar archivos comprimidos.Tratar de hacer mucha práctica...Las respuestas a los ejercicios están incluidas en la presentación.Pero traten de contestar los ejercicios antes de leerlas :-)

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 3 / 64

Page 4: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

ÍNDICE

1 ALGO MÁS COMPLEJOComandos de archivosRegular ExpressionManipulación de textoCompresión/Descompresión

2 REFERENCIAS

3 AL FINAL..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 4 / 64

Page 5: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

OBJETIVO

Nos vamos a enfocar ahora en comandos para manipular elcontenido de los archivosEn muchos casos, necesitamos extraer de manera automáticauna parte de los datos.Por ejemplo, extraer un campo específico.O solamente poder ver el inicio de un archivo largo.O simplemente, pero no menos latoso: ¿Dónde deje el archivoseq-project12.sam?

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 5 / 64

Page 6: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO FIND

¿ Recuerdan cuando buscamos los directorios dentro de /etc?Usamos el comando ls.Otra manera, es usar el comando find.Permite buscar archivos dentro de un directorio.Por ejemplo:Saben que existe dentro de su HOME un archivo llamadomiresultado( eso les pasará más veces de lo que piensan :-)

1 $ cd # para asegurarme que estoy en mi HOME$ pwd

3 /home/alumnoXX # ¡ Si estoy en mi home ! :-)$ find . -name mireusultado

5 ./Repos/ensayo1/mireusultado

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 6 / 64

Page 7: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 1: FIND

Retomen el ejercicio de búsqueda dentro del directorio /etc,pero ahora con find:”Queremos conocer el número de archivos y directorios queexisten en el directorio /etc (y no en sus sub-directorios), queempiezan con la letra i minúscula”Tips: verifiquen que la opción ”-name” acepta meta-carácter...Tips: vean como restringir la búsqueda (depth en inglés :-).

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 7 / 64

Page 8: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 1

El manual de find nos indica que la opción -name usameta-carácter.La opción -maxdepth 1 sera la necesaria..

1 $ find /etc -maxdepth 1 -name ’’i*’’/etc/issue

3 /etc/iproute2/etc/inputrc

5 /etc/issue.net/etc/ifplugd

7 /etc/iscsi/etc/init.d

9 /etc/init/etc/initramfs-tools

11 /etc/icedtea-web

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 8 / 64

Page 9: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

REGRESANDO AL /DEV/NULL

¿ Recuerdan el archivo especial /dev/null ?Supongamos que quieren buscar desde la raíz del sistema dearchivo (/), un archivo llamado date.Lleven a cabo esta búsqueda.¿ Para qué podría servirles /dev/null ?

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 9 / 64

Page 10: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

FIND CON /DEV/NULL

Si usamos el comando find / -name date , tendremosmuchos errores.Estos errores son de denegación de permiso.¡Normal!, Recuerden que en este sistema, ¡ su usuario no tienemuchos derechos!(Así se asegura el buen funcionamiento del sistema).

1 $ find / -name datefind: ‘/proc/tty/driver’: Permission denied

3 find: ‘/proc/1/task/1/fd’: Permission deniedfind: ‘/proc/1/task/1/fdinfo’: Permission denied

5 find: ‘/proc/1/task/1/ns’: Permission deniedfind: ‘/proc/1/fd’: Permission denied

7 ../.. # más 1500 líneas!!!

9 # Ahora sin todos esos errores de los cuales soy consciente.$ find / -name date 2>/dev/null

11 /bin/date/sys/devices/pnp0/00:01/rtc/rtc0/date

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 10 / 64

Page 11: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO CAT

El comando cat texto.txt : muestra en STDOUT el contenidode texto.txt

Por ejemplo, para los ”curiosos” que quieren saber quién puedeutilizar el sistema:

$ cat /etc/passwd2 root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

4 bin:x:2:2:bin:/bin:/usr/sbin/nologin.../...

6 alumno48:x:1055:1002::/home/alumno48:/bin/bashalumno49:x:1056:1002::/home/alumno49:/bin/bash

8 alumno50:x:1057:1002::/home/alumno50:/bin/bash%$

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 11 / 64

Page 12: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO SORT

El comando sort texto.txt : Ordena alfabéticamente laslíneas del archivo texto.txt en STDOUT

Nota: el archivo texto.txt queda intacto con el comandoanterior.Regresando a nuestro ”curioso”:

1 $ sort /etc/passwdalejandra:x:1051:1001:Grisel Alejandra Escobar Zepeda,,,:/home/alejandra:/bin/bash

3 alexsf:x:1001:1001:Alejandro Sanchez,,,:/home/alexsf:/bin/bashalumno01:x:1052:1002::/home/alumno01:/bin/bash

5 ../...vegal:x:1005:1001:Leticia Vega,,,:/home/vegal:/bin/bash

7 vjimenez:x:1003:1001:Veronica Jimenez Jacinto,,,:/home/vjimenez:/bin/bashwww-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 12 / 64

Page 13: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO UNIQ

uniq: elimina (o indica) las líneas sucesivas repetidas.Ejemplo con un archivo así :

$ cat listaCompras.txt2 lechugajitomate

4 pescadopescado

6 pan

Ven que se repite la línea 4 y 5.Si queremos quedarnos con una sola:

$ uniq listaCompras.txt2 lechugajitomate

4 pescadopan

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 13 / 64

Page 14: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 2 :LISTA

Reciben 2 listas de los nombres de reads de sus secuencias:

NS500502:4:H57V2BGXX:1:11101:-664106NS500502:4:H57V2BGXX:1:11101:-398960

Como verán más adelante, estos nombres son únicos..Como tienen la duda, quieren verificar que no hubo nombresrepetidos.¿ Cómo lo harían ?Si notan nombres repetidos, cual es mayor número derepeticiones?Las 2 listas están en /Data/Modulo2/Listas/con nombres lista-r-[1,2].txt

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 14 / 64

Page 15: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 2

Aparentemente, la lista viene desordenada...Si usamos solamente el comando uniq, no estamos seguros deque dos nombres repetidos se siguen: ¡Hay que ordenarlos primero!

# Primero verifico las opciones del comando uniq....2

$ ln -s /Data/Modulo2/Listas/lista-r-* . # Para facilitar el trabajo4 $ sort lista-r-1.txt|uniq -d # todo bien$ sort lista-r-2.txt|uniq -d # upsss!!! allí esta el problema!

6 NS500502:4:H57V2BGXX:1:11101:-1199408NS500502:4:H57V2BGXX:1:11101:-1536756

8 NS500502:4:H57V2BGXX:1:11101:-1564360NS500502:4:H57V2BGXX:1:11101:-312212

10 NS500502:4:H57V2BGXX:1:11101:-442726NS500502:4:H57V2BGXX:1:11101:-707674

12

# Para ver la línea más repetida14 $ sort lista-r-2.txt|uniq -dc|sort -rn |head -1

8 NS500502:4:H57V2BGXX:1:11101:-156436016 # 8 veces una línea repetida!!!

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 15 / 64

Page 16: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO CUT

cut: suprime parte de cada línea, usando un carácter comodelimitador de campos.Ejemplo: ya vimos el archivo /etc/passwd, que contiene lainformación sobre los usuarios del sistema.Los campos de información están separados por el carácter :Para sacar los nombres de login (el primer campo):

$ cat /etc/passwd2 root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

4 bin:x:2:2:bin:/bin:/usr/sbin/nologin../..

6 $ cut -d : -f 1 /etc/passwdroot

8 daemonbin

10 syssync

12 gamesman

14 ../..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 16 / 64

Page 17: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO HEAD / TAIL

head: encabezado de un archivo.¿ Cuál es el número de líneas que imprime por default elcomando?Si queremos únicamente los 5 primeros nombres de usuario(login):

$ cut -d : -f 1 /etc/passwd |head -52 rootdaemon

4 binsys

6 sync$

Su contra-parte es el comando tail¿ En este caso, cuáles serían los últimos 5 usuarios ?

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 17 / 64

Page 18: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 3 : EXTRAER NOMBRE DE UN ARCHIVO SAM

Podemos realizar tareas poderosas ”jugando” con los comandosanteriores y unos pipe |.Les entregamos un archivo de formato sam. (Este formato serapresentado ulteriormente; el separador es el tabulador ):NS500502:4:H57V2BGXX:1:11101:-928325 16 gi|545778205|gb|U00096.3| 2615463 99

18=1X31= * 0 0 CGACTGCGCATATTTTCGACCATTGCATCAATAATGCCCGCGTCCATTAA

’)’)+9<4:?23*56.(()<=3B>+B/@>?BEE7;CEF6ADEEF?@1@>B

Nota1: se muestra una sola línea, divida en 3 para facilitar la lectura.

Nota2: se elimino el encabezado del archivo.

Verificaremos que cada primer campo (nombre de read) , esúnico (Single-end Read).Los archivos están en /Data/Modulo2/SingleReads/, sellaman single-read-1.sam y single-read-2.sam.¿ Cómo lo harían ustedes?

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 18 / 64

Page 19: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 3

Aquí una solución :1 # Trabajamos con una liga:$ ln -s /Data/Modulo2/SingleReads/single-read-* .

3 $ ls -l single-read-*lrwxrwxrwx 1 alumnoXX alumno 43 Jun 25 20:24 single-read-1.sam -> /Data/Modulo2/SingleReads/single-read-1.sam

5 lrwxrwxrwx 1 alumnoXX alumno 43 Jun 25 20:24 single-read-2.sam -> /Data/Modulo2/SingleReads/single-read-2.sam

7 # De cuantos reads hablamos?$ wc -l single-read-*

9 124670 single-read-1.sam124379 single-read-2.sam

11 249049 total

13 # Verificamos que seleccionamos bien el 1er campo:$ cut -f 1 single-read-1.sam |head -2

15 NS500502:4:H57V2BGXX:1:11101:-404295NS500502:4:H57V2BGXX:1:11101:-315158

17# Seleccionamos, ordenamos, y detectamos los repetidos:

19 $ cut -f 1 single-read-1.sam | sort | uniq -dc$ # no hay repeticiones

21$ cut -f 1 single-read-2.sam | sort | uniq -dc

23 2 NS500502:4:H57V2BGXX:1:11101:-837926

25 # un reads esta dos veces! :-(# Veremos cómo saber si fue una línea repetida o es otro problema.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 19 / 64

Page 20: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

ÍNDICE

1 ALGO MÁS COMPLEJOComandos de archivosRegular ExpressionManipulación de textoCompresión/Descompresión

2 REFERENCIAS

3 AL FINAL..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 20 / 64

Page 21: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

OBJETIVO

Sabemos cómo trabajar con todo o parte de los archivos y sucontenido.Ahora, nos enfocaremos más al contenido mismo de estos archivos.

Buscar una palabra ”clave” dentro de estos datos.Conocer el lenguaje para poder definir estas búsquedas de textode manera muy compleja y completa.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 21 / 64

Page 22: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO GREP

grep: busca un patrón dentro de un archivo ( o STDIN ).Por ejemplo, ¿ Existe un usuario llamado ”karel” en el sistema?:

$ grep karel /etc/passwd2 karel:x:1003:1001:Karel Estrada,,,:/home/karel:/bin/bash

Si su búsqueda incluye espacio o meta-carácter, se debedelimitar con dos doble comillas "....":

$ grep "Karel Estrada" /etc/passwd2 karel:x:1003:1001:Karel Estrada,,,:/home/karel:/bin/bash

4 $ grep Karel Estrada /etc/passwdgrep: Estrada: No such file or directory

6 /etc/passwd:karel:x:1003:1002:Karel Estrada,,,:/home/karel:/bin/bash

Expliquen porque la segunda búsqueda genera un error.Notan la salida diferente en esta segunda búsqueda.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 22 / 64

Page 23: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 4 : NOMBRES REPETIDOS

Regresamos al problema del read repetido en el archivosingle-read-2.sam.¿ Cómo harían para detectar si las 2 líneas de este nombrerepetido son iguales o no?Si son diferentes, ¿ En cuál(es) campo(s) está la diferencia?

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 23 / 64

Page 24: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 4

Tenemos que extraer las 2 líneas con grep

Analizamos si son iguales con uniq.

$ grep "NS500502:4:H57V2BGXX:1:11101:-837926" single-read-2.sam > dobles2 $ cat doblesNS500502:4:H57V2BGXX:1:11101:-837926 16 gi|545778205|gb|U00096.3| 3056327 99 8=1X41= * 0 0 ATTAATACTACAAGGAATGAGTGTTGATTATGCGAGCAGACTCGCACTCC )4+.824.)283?’*=7@=(A3<B?BAF3ECEDDDA?*ACBA56B?.?-@

4 NS500502:4:H57V2BGXX:1:11101:-837926 16 gi|545778205|gb|U00096.3| 2081307 99 8=1X41= * 0 0 ATTAAAACTACAAGGAATGAGTGTTGATTATGCGAGCAGACTCGCACTCC )4+.824.)283?’*=7@=(A3<B?BAF3ECEDDDA?*ACBA56B?.?-@$ uniq dobles

6 NS500502:4:H57V2BGXX:1:11101:-837926 16 gi|545778205|gb|U00096.3| 3056327 99 8=1X41= * 0 0 ATTAATACTACAAGGAATGAGTGTTGATTATGCGAGCAGACTCGCACTCC )4+.824.)283?’*=7@=(A3<B?BAF3ECEDDDA?*ACBA56B?.?-@NS500502:4:H57V2BGXX:1:11101:-837926 16 gi|545778205|gb|U00096.3| 2081307 99 8=1X41= * 0 0 ATTAAAACTACAAGGAATGAGTGTTGATTATGCGAGCAGACTCGCACTCC )4+.824.)283?’*=7@=(A3<B?BAF3ECEDDDA?*ACBA56B?.?-@

8 # las líneas son diferentes... en cual? separamos por campo..$ cut -f 4 dobles|uniq

10 30563272081307

12 # diferencia en el 4to campo El de la posicion del mapeo

14 # En una sola línea:$ grep "NS500502:4:H57V2BGXX:1:11101:-837926" single-read-2.sam | uniq | cut -f 4 |uniq

16 30563272081307

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 24 / 64

Page 25: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

DEFINICIÓN

El comando grep, entre otros, permite el uso de expresionescomplejas para la búsqueda de patrones.Las expresiones regulares (o ”regexp”) hacen referencia amotivos que describen un conjunto de caracteres.Estas expresiones permiten definir reglas que describen cadenasde caracteres.En el ejemplo anterior:grep karel /etc/passwdla cadena ”karel” es una expresión regular (muy sencilla).

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 25 / 64

Page 26: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

META-CARACTERES

El poder de las expresiones regulares reside en el uso deMeta-caracteres: carácter con comportamientos especial.

. : Corresponde a un carácter únicamente; ”a.c” detecta a ”abc” y”azc”^ : inicio de la línea : ” ^Línea empieza ”

$ : fin de línea : ” línea acaba aquí$ ”

* : corresponde a cualquier número de veces el motivo anterior:”ab*c” detecta ”ac”, ”abc” y ”abbbc”.+ : corresponde al menos a una vez el motivo anterior ; ”ab+c”detecta ”abc”, pero no ”ac”? : cero o una vez el motivo anterior : ”ab?c” detecta ”abc” y ”ac”| : O lógico: ”abc|def” detecta ”abc” y ”def”

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 26 / 64

Page 27: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

¿ CÓMO LEER LAS REGEXP ?

Las RegExp se leen ”normalmente”, es decir de izquierda haciaderecha, añadiendo las reglas :Por ejemplo ^inicio*elfin$

El ^ nos indica que la línea empieza con el siguiente conjunto decaracteres : inicioluego el * : el conjunto anterior, es decir la letra o, aparecerá ceroo varias veces..Luego el conjunto de letras elfin DEBERÁ encontrarse al finalde la línea: carácter $

Entonces, se detectará ”inicioelfin” ”iniciooooelfin”No se detectará : ” inicioelfin” y ”inicio elfin”

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 27 / 64

Page 28: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

USO DE REGEXP

Cuando quieren usar regexp, se debe de elegir el patrón mássencillo que permita separar sus datos.El buen habito sería, antes de usar su regla contra miles delíneas, hacer un archivo de prueba con :

I Unas líneas que deben detectar.I Unas líneas que no deben detectar.I Utilizando la información que tengan sobre los datos que se van a

analizar.

Así simplemente ven si su regexp esta correcto o no.En el ejemplo de la lista de los nombre de reads, podrían usar^NS50 para encontrar los identificadores con la nomenclaturacorrecta (aunque finalmente el archivo no tiene errores en sentidoestricto).

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 28 / 64

Page 29: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

PRÁCTICA DE REGEXP

En un archivo, queremos sacar las líneas que empiezan con”inici”, seguido con cero o más veces el carácter ’o’ y queacaban con ”elfin”.Ya definimos el regexp que podría ser: ^inicio*elfin$Usamos el comando echo ( o un editor de texto) para crearnuestro archivo de prueba test:

1 $ echo "inicioelfin" > test # creamos el archivo$ echo "inicioooelfin" >> test

3 $ echo "inicielfin" >> test # 3 líneas a detectar$ echo " inicioelfin" >> test

5 $ echo "inicio elfin" >> test$ echo "inicioelfin3" >> test # 3 líneas no detectadas

7 # Podemos hacer ’cat test’ para verificar las líneas..$ grep "^inicio*elfin$" test # la búsqueda... Las 3 están detectadas, ok!

9 inicioelfininicioooelfin

11 inicielfin

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 29 / 64

Page 30: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 5: GREP CON META CARACTERES

Usando el comando grep, busquen los siguientes en los dos archivoslista-r-[1,2].txt :

Las líneas que empiezan con ”NS50”Las líneas que NO empiezan con ”NS50”Las líneas que acaban con ”80”o ”81”o ”82” .¿ Existe en el 5to campo de estos archivos una cadena diferentea ’11101’ ?

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 30 / 64

Page 31: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 5

Aquí presentamos una solución:

1 # Líneas que empiezan con NS50$ grep "^NS50" lista-r-[1,2].txt # Como habrá muchas, \

3 podemos hacer un pipe con ’wc’

5 # Líneas que NO empiezan con NS50 (ver manual de grep..)$ grep -v "^NS50" lista-r-[1,2].txt | wc -l

7 0

9 # acaban con 80 , 81 ó 82$ grep "8[0-2]$" lista-r-[1,2].txt | wc -l

11 2145

13 # 5to campo diferente a 11101 ?$ cut -d : -f 5 lista-r-[1,2].txt | grep -v "11101" | wc -l

15 1$ cut -d : -f 5 lista-r-[1,2].txt | grep -v "11101"

17 11102

19 # la lista 2 esta ya muy mal :-)

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 31 / 64

Page 32: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

META-CARÁCTER escape ”\”

Si quieren usar un meta-carácter como ”carácter” normal, éstedebe ser escapadoEjemplo, si buscan archivo con el carácter ”$”:grep -E ’\$’ ..

En los archivos sam single-read-[1,2].sam, buscamos siexisten líneas con el patrón ’3*’ (el carácter 3 seguido delcarácter *), y cuántas son:

1 $ grep ’3\*’ single-read-[1,2].sam | head -1gi|49175990|ref|NC_000913.2|-92793 0 gi|49175990|ref|NC_000913.2|\

3 774400 99 50= * 0 0 TTGTTCCTGAAGGCTAGCCTTCTGGTTAAACT\TATCATGTTGATTTTGAT @@9CA?,*C9EE@DB3EBFCBE55A>A8D=<>.@.=.3<’79\

5 <)52+1)+$ grep ’3\*’ single-read-[1,2].sam | wc -l

7 8645

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 32 / 64

Page 33: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

AGRUPAR O COMPATIBILIZAR EN REGEXP

Existen maneras de definir diferentes comportamientos de las ”regexp”

{n} : Corresponde a n veces el bloque anterior : a{3} detecta”aaa”.{n,} : Corresponde a n veces mínimo el bloque anterior :a{3,} detecta ”aaaaa”.{n,m} : Corresponde a entre n y m veces el bloque anterior :a{3,4} detecta ”aaa” y ”aaaa”.( ) : define un grupo : ”(abc){2}” detectará ”abcabc”[ ] : cualquier carácter dentro de los corchetes: ”[abc]”detectará ”a” o ”sgsgsgb”[^] : cualquier carácter que no este dentro de los corchetes:”[^abc]” detectará ”z” o ”sgsgsg” pero también ”zzzbzzz” (¡ Porquez no esta excluido!)

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 33 / 64

Page 34: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 6 : ARCHIVOS EXTRAÑOS

Retomamos el ejercicio con la lista de los archivos”datos-XXXX’’ (Ejercicio 12, Parte 1).Habíamos detectado que existían 2 archivos extraños.¿ Cómo harían para conocer los nombres de estos archivos?Una solución es leer toda la lista... Pero en este caso usaremoslas herramientas aprendidas..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 34 / 64

Page 35: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 6

Habíamos realizado la lista de todos los archivos dentro de/Data/Modulo2/Wildcard/.Usamos un motivo de búsqueda, a partir de los nombresesperados.Y buscamos los que no corresponden a este motivo.

1 # Así se generó la lista...$ ls /Data/Modulo2/Wildcard/* > lista-total

3# Los archivos son del formato : datos-XXXX

5 # con X : entre 0 y 9..# RegExp: datos-[0-9][0-9][0-9][0-9]$

7 # El $ al final : para ser seguro de no cachar un archivo como "datos-XXXXTest"

9 # Buscamos los buenos y verificamos la cantidad:$ grep "datos-[0-9][0-9][0-9][0-9]$" lista-total | wc -l

11 9999 # parece bien... En caso de duda, se puede ver la lista sin contar ..

13 # Buscamos los extraños:$ grep -v "datos-[0-9][0-9][0-9][0-9]$" lista-total

15 /Data/Modulo1/Wildcard/datos-123/Data/Modulo1/Wildcard/Log

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 35 / 64

Page 36: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

ALGUNOS EJEMPLOS DE REGULAR EXPRESSION

Para buscar la palabra ”comer” con una o más ”r” en todos losarchivos :grep ’comer*’ ...

Buscar una línea que empieza con “dormir”grep ’^dormir’ ...

Buscar una línea que acaba con “regresar”grep ’regresar$’ ...

Buscar una línea que contiene 2 veces la cadena “gc”grep -E ’(gc){2}’ ...

Nota: la opción -E es porque los caracteres ” ? + { } ( ) ” son ignoradoscon el grep básico. En caso de duda, usen la opción -E...

Mostrar 5 líneas que siguen las que contienes la letra “g” o “c”grep -A 5 ’[gc]’ ...

Lean el manual de grep para conocer más...

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 36 / 64

Page 37: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 7 :MOTIVO REPETIDO

En el caso del archivo de reads que usamos anteriormente(single-read-[1,2].sam), puede ser que estén interesadosen buscar un motivo de nucleótidos repetidos.Aunque existen herramientas más especificas, podemos usar elcomando grep para este fin..Ejercicio: busquen en el archivo reads-generados.sam si existereads con el motivo TGCT, una vez, 2 veces y más de 2 veces..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 37 / 64

Page 38: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 7

Tenemos que buscar primero el número de campo de lassecuencias.La búsqueda debe hacerse tanto con minúscula como conmayúscula.

# averiguamos el # del campo de la secuencia ..2 $ head -1 single-read-1.sam |cut -f 9,10,110 CATCTCTGGTTCGGTGTTTGTCGAAAAAGAAGTTAGACCGGCAGTTCGCG /=@CCC9;CFD9F@CDE-2>C+@,;5+<3<@[email protected]=’*D=)<)’.8C+9)

4

# Es el campo 10 ..6

# por el primer archivo:8 $ cut -f 10 single-read-1.sam | grep -E -i ’(TGCT){1}’ |wc -l24768

10 $ cut -f 10 single-read-1.sam | grep -E -i ’(TGCT){2}’ |wc -l70

12 $ cut -f 10 single-read-1.sam | grep -E -i ’(TGCT){3}’ |wc -l0

No hay 3 veces el mismo motivo en los read del primer archivo.JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 38 / 64

Page 39: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

ÍNDICE

1 ALGO MÁS COMPLEJOComandos de archivosRegular ExpressionManipulación de textoCompresión/Descompresión

2 REFERENCIAS

3 AL FINAL..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 39 / 64

Page 40: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

OBJETIVO

En las tareas regulares de análisis de datos de NGS, en ocasiones esnecesario cambiar el texto dentro de un archivo.Y por lo regular, no es solamente sobre un campo de una línea, sinoque sobre varias líneas.

Conocer algunos comandos específicos para cambiar el texto.Ejercitar con ejemplos.

Nota : existen lenguajes como Perl enfocados a estos temas...

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 40 / 64

Page 41: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

CAMBIOS DE TEXTO

Supongamos que quieren cambiar en un archivo un texto por otro.Trabajemos con un archivo en formato Fasta (verán los detallesdel formato más adelante):

1 $ head /Data/Modulo2/Fasta/pruebased.fasta>EMBOSS_001

3 gtcagggtgtggacaccttcctctcctcccagattgttgt>EMBOSS_002

5 catgtcggccatcgatgggtactgaccagagatccgttgc>EMBOSS_003

7 cctcaacgggtagattacaattaatctgacgccgcgctgc>EMBOSS_004

9 tcacgttcccgtgacagtattaaacatcatcacctactta>EMBOSS_005

11 aagaaatctgcatgagttaggggtcagcagcataattagt

Nos proponemos cambiar el nombre ”EMBOSS_” por ”Ch-” entodo el archivo.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 41 / 64

Page 42: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO SED

Se puede lograr el cambio con el comando sed.Detectar las líneas que empiezan con ”>EMBOSS_” :

I RegExp: ^>EMBOSS_I ^ (ancla) : para indicar que la línea empieza con ”>”.

sintaxis:sed -e ’s/CadenaOriginal/NuevaCadena/’ files indica una substitución.La salida es STDOUT.En este caso:sed -e ’s/^>EMBOSS_/>Ch-/’ file.fasta

Traten de hacerlo con el archivo pruebased.fasta que seubica en de /Data/Modulo2/Fasta.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 42 / 64

Page 43: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

MÁS SOBRE EL COMANDO SED

En el comando anterior:sed -e ’s/CadenaOriginal/NuevaCadena/’ fileLa primera ocurrencia de ”CadenaOriginal” es cambiada por”NuevaCadena” y continua en la línea siguiente.Si quieren realizar los cambios en todas las ocurrencias, hay queañadir la opción g al final:sed -e ’s/CadenaOriginal/nuevaCadena/g’ file

Sed de base interpreta las RegExp sencillamente.Si necesitan usar caracteres especiales como [TAB], hay que usarlas RegExp extendida (Vean el manual en este caso)Nota: para definir el [TAB], se usará la secuencia \t.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 43 / 64

Page 44: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 8 : CAMBIAR NOMBRES DE READS

Quieren cambiar el tercer campo del archivosingle-read-1.sam.Como verán más adelante, este campo significa la referencia delgenoma.Cambian ”gi|545778205|gb|U00096.3|” por ”Eck-12”.Una vez logrado, tratan de hacer lo mismo con otro archivo samde reads pareados simul-pe.sam dentro del directorio/Data/Modulo2/PEReads/ .Nota: Recuerden que los campos de los reads están separadospor Tabulador [TAB].Esto se denota como \t en RegExp.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 44 / 64

Page 45: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 8

Estrictamente, hay que buscar la cadena siguiente:[TAB]gi|545778205|gb|U00096.3|[TAB]

El problema es que el carácter | en los RegExp expresa un Ológico.Hay que escaparlo con \.El regexp de búsqueda es :\tgi\|545778205\|gb\|U00096.3\|\t .

Y lo cambiamos por \tEck-12\t .

Como hay uso de [TAB], hay que usar la opción -r de sed :

1 $ sed -r ’s/\tgi\|545778205\|gb\|U00096.3\|/\tEck-12\t/g’ single-read-1.sam

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 45 / 64

Page 46: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMANDO AWK

Para el proceso y escaneo de texto, existe un comando poderoso,aunque de sintaxis compleja.Se trata del comando awk.Permite escribir ”programas” completos para realizar una tarea deanálisis de archivos.En nuestro caso, lo usaremos de manera más sencilla, con casosconcretos, en línea de comando.Para mayor información revisen la liga siguiente :www.gnu.org/software/gawk/manual/gawk.html

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 46 / 64

Page 47: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

QUITAR LAS PRIMERA O ULTIMAS LÍNEAS

Para quitar las 10 primeras líneas de un archivo, con salida alSTDOUT:awk ’NR>10’ archivo

Para conservar las 20 primeras líneas:awk ’NR<=20’ archivo¿ Qué otro comando hace lo mismo?Como lo adivinaron, NR corresponde a Number Record, o línea...Cuando awk lee el archivo, aumenta el valor de NR, y según suvalor, escribe o no en la salida la línea.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 47 / 64

Page 48: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

AWK COMO GREP

Podemos usar el comando awk con esta regla:awk ’/RegExp/ { acción }’ archivo

En caso de encontrar un RegExp en la línea, realizamos la acciónentre corcheteEn nuestro caso, será únicamente imprimir.Ejemplo:Si encuentro la palabra root, imprimo el primer campo:awk ’/root/ {print $1 }’ /etc/passwd

Por default, se considera el espacio o [TAB] como separador decampo.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 48 / 64

Page 49: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

AWK CON CONDICIÓN

Al igual que con RegExp, podemos usar el comando awk así:awk ’condición { acción }’ archivo

La condición puede ser (esta lista no es exhaustiva):I == : igualdadI != : diferenciaI >= : superior o igualI ~ /RegExp/ : RegExp econtrada

En caso de cumplir la condición en la línea, realizamos la acciónentre corchetes.Ejemplo:Si dentro de miarchivo, el primer campo vale 10 , imprimo los 4primeros campos:awk ’$1 == 10 {print $1,$2,$3,$4 }’ miarchivo

Existe manera de definir el carácter separador, con la variable FS.Se los dejo de tarea..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 49 / 64

Page 50: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 9: AWK COMO GREP

En el archivo simul-pe.sam, de read pareados, vamos a buscarlos motivos TG repetidos en las secuencias.Usen awk y extraigan únicamente la secuencia (campo #10).¿ Cuál es el número máximo de estas repeticiones en todas lassecuencias?

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 50 / 64

Page 51: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 9

El RegExp en este caso será:(TG){X} cambiando X por el número de repeticiones deseadas.

1 # Nos movemos a /Data/Modulo2/PEReads o# hacemos una liga simbólica.. como quieren..

3

# buscar una vez TG:5 $ awk ’ $10 ~ /TG/ {print $10 }’ simul-pe.sam |wc -l106742

7

# por 3 veces..9 $ awk ’ $10 ~ /(TG){3}/ {print $10 }’ simul-pe.sam |wc -l584

11

# 5 es el máximo : la secuencia es:13 $ awk ’ $10 ~ /(TG){5}/ {print $10 }’ simul-pe.sam

ATGGCTGCGTCAGACGGGAGGAGTGTGTGTGTGAGCGTATACGACTGATT

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 51 / 64

Page 52: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 10 : AWK CON CONDICIÓN

De nuevo con el archivo simul-pe.sam, nos proponemos sacarlos reads que tengan un flag de valor 147.Utilicen awk para esta tareaComo bonus: dentro de estos reads encontrados, ¿ Existensecuencias idénticas?Intenten ahora con los flags estrictamente inferior a 147.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 52 / 64

Page 53: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 10

El flag es el campo # 2.Con awk la condición será : $2 == 147

(o $2 < 147 en la segunda parte)La salida será manipulada con sort y uniq ...

# Sacamos el campo 2 y vemos si todo está bien con head2 # Imprimo el campo 2 para asegurarme...$ awk ’$2 == 147 {print $2,$10}’ simul-pe.sam | head -1

4 147 CAGCGGGCTGCAGGAGACGGCCTTCATGATCGGCTAAGGTTTCGGCCTGA

6 # Contamos..$ awk ’$2 == 147 {print $10}’ simul-pe.sam | wc -l

8 27584

10 # Ahora hay secuencias iguales?$ awk ’$2 == 147 {print $10}’ simul-pe.sam | sort|uniq -dc |wc -l

12 0# Hagan lo mismo con la otra condición..

En este ejercicio, se consideran las secuencias como texto, no como lo que representanrealmente, DNA.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 53 / 64

Page 54: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

USO MAS COMPLEJO

Tenemos una lista de nombres, uno por línea.Queremos cambiar el formato de esta lista por una sola línea,separando por comas.awk ’{printf ”%s , ”,$0}’ archivo

En el ejercicio de extraer los nombres de usuarios de la máquina:

1 $ cut -d : -f 1 /etc/passwd | sort | head -3 | \awk ’{printf "%s , " ,$0\}’

3 alexsf , backup , bin , .....

Recuerden que el carácter al final de la línea 1 es para indicar quesigue el comando allí. Se dividío la línea en 2 para que sea legible.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 54 / 64

Page 55: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

SACAR LÍNEAS ESPECÍFICAS

Van a usar archivos Fastq ulteriormente.Por ahora, sepan que su formato se basa en un conjunto de 4líneas:

@gi|49175990|ref|NC_000913.2|-1855860GGGCCGTCATGCCAAAGTGCCACTGATTGCCTTTCTTGGTCAGATCCATC+@@B>:-BCADA+>9BDBA?A?B?C,DC/)E’=>@EC?<<25/2=5’8=4+

Podemos cambiar el formato de Fastq a Fasta, quedándonos conla primera y la segunda línea, con cambios específicos..

awk ’NR%4 == 1 {printf ">%s\n", substr($0,2)}NR%4 == 2 {print}’

NR%4 representa ” NR mod 4 ” : el residuo de la división de NRentre 4.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 55 / 64

Page 56: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

ÍNDICE

1 ALGO MÁS COMPLEJOComandos de archivosRegular ExpressionManipulación de textoCompresión/Descompresión

2 REFERENCIAS

3 AL FINAL..

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 56 / 64

Page 57: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

OBJETIVO

Por lo regular, los archivos generados por NGS están comprimidos.La ventaja de la compresión es que reduce hasta el 60 % el tamañodel archivo, debido a que contienen líneas muy parecidas.

Conocer los tipos de compresión más usados en el dominio.Poder manipular directamente los datos comprimidos.

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 57 / 64

Page 58: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

COMPRESIÓN/DESCOMPRESIÓN DE ARCHIVOS

gzip archivo1 : comprime archivo1 en archivo1.gz

gunzip archivo1.gz : descomprime archivo1.gz enarchivo1

bzip2 archivo : comprime archivo1 en archivo1.bz2, conmejor rendimiento que gzip

bunzip2 archivo1.bz2 : descomprime archivo1.bz2 enarchivo1

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 58 / 64

Page 59: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

LEER ARCHIVOS COMPRIMIDOS

En general, tratemos de no descomprimir los datos en un archivo.Por el hecho que ocupa más espacio, y verán que este es uncriterio vital para el uso de los datos de NGS.Tratamos de descomprimir ”en memoria”, y analizar los datos allí.Por eso el uso de flujo en Linux es interesante.zcat|bzcat archivo1.gz|bz2 : muestra el contenido delarchivo1.gz|bz2 en STDOUT

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 59 / 64

Page 60: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

USO DE GZIP, BGZIP...

Usamos un archivo sam comprimido. ¿ Que función tiene el comandofile aquí mostrado?

1 # Copiar el archivo en su Home:$ cp /Curso/Modulo1/Compress/reads-single-end.sam.gz .

3 $ file reads-single-end.sam.gzreads-single-end.sam.gz: gzip compressed data, was "reads-single-end.sam"...

5

# Descomprimirlo....7 $ gunzip -v reads-single-end.sam.gzreads-single-end.sam.gz: 63.2% -- replaced with reads-single-end.sam

9 $ file reads-single-end.samreads-single-end.sam: ASCII text

11

# Comprimir con bzip213 $ bzip2 -v reads-single-end.sam

reads-single-end.sam: 3.334:1, 2.399 bits/byte, 70.01% saved, 20954545 in, 6284348 out.15 $ file reads-single-end.sam.bz2

reads-single-end.sam.bz2: bzip2 compressed data, block size = 900k

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 60 / 64

Page 61: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO 11: LECTURA DE ARCHIVOS COMPRIMIDOS

Busquen en el servidor del curso un archivo que se llame algocomo experiment-HGF.sam ?Verifiquen que esta comprimido, y que parece ser del formatosam.Pueden detectar si hay read con la secuencia ’TA’ repetida másde 2 veces? 5 veces?Tips:

I Usen diferentes comandos para extraer la información del archivooriginal.

I Como en los ejercicios anteriores, no se trata de escribir la línea enuna sola vez, pero intentar paso a paso y ver los resultados..

I No olviden que el comando head limita la salida :-)

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 61 / 64

Page 62: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

UNA SOLUCIÓN 11

Aquí les presentamos una solución

# buscamos en todo:2 $ find / -name "*experiment-HGF.sam*" 2>/dev/null/aqui/esta/experiment-HGF.sam.gz

4 # hagamos la liga$ ln -s /aqui/esta/experiment-HGF.sam.gz .

6# Es comprimido (ver opción -L de file)

8 $ file -L experiment-HGF.sam.gzexperiment-HGF.sam.gz: gzip compressed data, was "experiment-HGF.sam", from Unix, last modified: Tue Jun 30 18:40:03 2015

10# verificamos que esté en formato sam..

12 $ zcat experiment-HGF.sam.gz |head@HD VN:1.4 SQ:unsorted

14 @SQ SN:gi|545778205|gb|U00096.3| Escherichia coli str. K-12 substr. MG1655, complete genome LN:4641652@PG ID:01 PN:ART_Illumina CL:art_illumina -i ECK12.fasta -l 75 -f 5 -s 10 -o experiment-HGF -sam

16 gi|545778205|gb|U00096.3|-309440 0 gi|545778205|gb|U00096.3| 3140393 99 53=1X21= * 0 0 GAAAGGATCATTCGTGCGCAGTCATCCGTCAGGCGTTGGCCCTCTTCAATCGAGATGCTGTGCGAAAGCGGCGAC ;>;3’75=>7>>9@<>/AA=?@@@?9A8BA@9?&>@3@BBC3>-D@=(==9*E’@;4@?,979&7&7;93656’8../..

18# ahora saben cómo manipular los datos..

20 # con cut?$ zcat experiment-HGF.sam.gz |cut -f 10 |grep -i -E "(TA){5}"|wc -l

22 5

24 # Con awk ?$ zcat experiment-HGF.sam.gz |awk ’{print $10}’|grep -i -E "(TA){5}"|wc -l

26 5

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 62 / 64

Page 63: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

REFERENCIAS

Existe una gran cantidad de tutórales en línea para el uso de losUnices...http://www.linux-tutorial.info/

Un sitio orientado a los científicos principiantes en computación:https://software-carpentry.org/

Un resumen de los comandos en línea...http://fosswire.com/post/2007/08/unixlinux-command-cheat-sheet/

La catedral y el bazar:http://biblioweb.sindominio.net/telematica/catedral.html

Sobre Expresiones Regulares: “Mastering RegularExpressions, Third Edition” en las ediciones “O’Reilly”Art: simulation tools to generate synthetic next-generationsequencing reads.http://www.niehs.nih.gov/research/resources/software/biostatistics/art/

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 63 / 64

Page 64: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

AGRADECIMIENTOS

Gracias a:

Alfredo ,Ivan , Joel (LCG).A la LCG.A Juan Manuel por su revisión y ayuda.Alejandra, Verónica, Lety, Karel, Alejandro(USMB).

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 64 / 64

Page 65: Introducción a Unix / Linux - Parte 2 : manejando …zazil.ibt.unam.mx/usmb/wp-content/uploads/2016/05/...INTRODUCCIÓN A UNIX / LINUX PARTE 2 : MANEJANDO DATOS DE NGS Jérôme Verleyeny

EJERCICIO FINAL

JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 65 / 64