View
7
Download
0
Category
Preview:
Citation preview
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
jerome@ibt.unam.mx
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
Í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
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
Í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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Í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
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
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
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
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
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
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
¿ 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
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
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
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
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
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
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
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
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
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
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
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<@2@.C=’*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
Í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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Í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
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
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
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
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
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
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
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
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
EJERCICIO FINAL
JÉRÔME V. (IBT - UNAM) INTRODUCCIÓN A UNIX / LINUX 1-4 DE AGOSTO 2017 65 / 64
Recommended