PR6 Guía de actividades práctico 6 Docente: Dr. Andrés Iriarte “Scripting Shell: Introducción a la programación en bash y uso de variables. Recorrer listas, ejecutar acciones repetidas. Uso de bucles y condicional.” En este práctico el estudiante generará sus primeros códigos en lenguaje Bash para automatizar procesos. Utilizaremos variables de distinto tipo y automatizaremos acciones utilizando los bucles for, while. Finalmente pondremos en práctica condicionales para hacer que el script recorra diferentes procesos de acuerdo a una condición dada. - EJERCICIO: Para cada uno de los puntos planteados a continuación usted debe generar el pseudocodigo, es decir un esquema de los bloques de acciones que ejecutará, y el código pedido. Escriba un script en Bash que: 1. dada una lista de nombres (en archivo incluido) salude a cada uno de ellos. Pistas: for, nombres.lis, echo "saludo", exit, reciclar script anterior. #### - - EJER 1 - - - - - - - - - - - - - # Damos inicio al script START (#!/bin/bash) # Cargamos el archivo con la lista de nombres nombres_var = load "path/to/nombres.lis" # Realizamos un bulce sobre la lista de elementos en nombres_var FOR nombre IN nombres_var DO # Se imprime a la pantalla el siguiente texto echo "Buen día " + nombre + "!" DONE # Finalizamos el script END #### - - - - - - - - - - - - - - - - - - - #### - - EJER 2 - - - - - - - - - - - - - START # Le damos las instrucciones al usuario echo "Elija un número :)" # Leemos cargamos el número sumistrado por el usuario read user_num # Iniciamos un bucle while i=1 WHILE i < user_num: DO # Imprimo los números impares echo "El número " + i + "es impar y menor a " + user_num # Le sumo 2 a la variable i i = i + 2 DONE END #### - - - - - - - - - - - - - - - - - - - #### - - EJER 3 - - - - - - - - - - - - - START # Creamos variables que van a contener las rutas a nuestro genoma de referencia y nuestra futura base de datos REF_GENOME_PATH = "path/to/reference.fna" TR_REF_GENOME_PATH = "path/to/reference.faa" PROT_DB_PATH = "path/to/prot_db" # Archivos de salida de blastp BLAST_TABLE = "path/to/blast.bl" FBLAST_TABLE = "path/to/filtered.blast.bl" # Traducimos nuestra referencia transeq -sequence REF_GENOME_PATH -outseq TR_REF_GENOME_PATH # Creamos nuestra base de datos para usar con blastp makeblastdb -dbtype prot -in REF_GENOME_PATH -out PROT_DB_PATH # Creamos nuestra lista de queries query_list = list "path/to/queries_dir/ *.query.fas" # Recorremos todos los queries de la lista con un for loop FOR my_query IN query_list DO # Realizamos un blast para cada query blastp -query my_query -db PROT_DB_PATH -outfmt "query_name subject_name identity coverage" > BLAST_TABLE # Filtramos la tabla de blast según valores de identidad y covertura mínimos filter (min_coverage > coverage; min_identity > identity ) BLAST_TABLE >> FBLAST_TABLE DONE END #### - - - - - - - - - - - - - - - - - - - #### - - EJER 4 - - - - - - - - - - - - - START # Definimos nuestra los path de nuestros archivos de entrada y salida CDS_PATH = "path/to/my_seq.fasta" AA_PATH = "path/to/my_seq.aa" # Cargamos nuestra secuencia codificante cds_seq = load CDS_PATH # Dividimos nuestra secuencia en una Lista de tripletes split_cds_seq = split( cds_seq ) # Iteramos sobre dicha lista para generar nuestra secuencia de aminoácidos FOR codon IN split_cds_seq DO # Traducimos cada codón a su aminoácidos my_translate(codon) >> AA_PATH DONE END #### - - - - - - - - - - - - - - - - - - - - Para desarrollar el script anterior hicimos uso de las funcioens split y my_translate. ¿De que manera podríamos definir estas funciones? #### - - EJER 5 (Opcional) - - - - - - - - - Escriba un script que reciba como argumento un archivo FASTA (*.fna, *.fa o *.fasta) y que: 1. Muestre únicamente las secuencias (no los headers) que contengan al menos un motivo “ATG...TAA”, “ATG...TAG” o “ATG...TGA”, es decir, posibles genes con codón de inicio y stop válidos. 2. Ignore las secuencias que no contengan ese patrón. 3. Guarde los nombres de las secuencias que cumplen la condición en un archivo genes_detectados.txt. Pistas: Las siguientes expresiónes rgulares pueden ser útiles .* : Busca cualquier posible caracter (expr1|expr2|expr3): Busca cualquier caracter que encaje con las expresiones: expr1, expr2, expr3 ^: Representa el inicio de linea $: Representa el final de linea Ejemplo: my_string.txt """ ABABABABABA AABBAABBAAB AAAAAAAAAAA BBBBBBBBBBB """ egrep "(AA|BB)" my_string.txt > my_filtered_seq.txt > AABBAABBAAB > AAAAAAAAAAA > BBBBBBBBBBB my_string2.txt """ >Header 1 ABABABABABA >Header 2 AABBAABBAAB >Header 3 AAAAAAAAAAA >Header 4 BBBBBBBBBBB """ # Muestra los encabezados egrep -A1 "(AA|BB)" my_string2.txt | egrep ">" > >Header 2 > >Header 3 > >Header 4 #### - - - - - - - - - - - - - - - - - - - -