13 Scripts en Bash
Los scripts
son archivos de texto que contienen instrucciones ejecutables por un intérprete de un lenguaje de programación para la ejecución de tareas. El formato .sh
se utiliza para escribir scripts ejecutables
por un intérprete como Bash. En esta sección crearemos varios scripts de Bash y usaremos varios comandos y operadores.
Los script de Bash contiene al inicio esta descripción #!bin/bash
y la extensión .sh
13.1 Actividad grupal
Paso 1. Crear un script en Bash con el nombre demo.sh empleando nano.
nano demo.sh
Paso 2. Copia el siguiente código dentro del script demo.sh
y guarda los cambios.
#!/bin/bash
# File: demo.sh
# Input de archivo
# 2. Mostrar el archivo y número de argumentos
echo "Archivo a procesar > $@"
echo "Numero de argumentos: $#"
# 3. Conteo de secuencias y separación de malas lecturas
numero_secuencias=$(grep -c '^@SRR098026' $@)
grep -B1 -A2 NNNNNNNNNN $@ > malas_lecturas.fastq
malas=$(cat malas_lecturas.fastq | wc -l)
echo "Número de malas lecturas: $malas"
# 4. Búsqueda de patrones
echo "Desea buscar patrones (y/n): "
read d
if [[ $d == "y" ]]; then
echo "Los patrones se guardarán en: patrones.txt"
echo -e 'ACTG\nCCCCC\nNNNCNNN\nNNNGNNN\nTTTT\nTATA\nAAA' > patrones.txt
grep -f patrones.txt $@ > busqueda.txt
echo "Búsqueda de patrones guardada en: busqueda.txt"
else
echo "ok :P"
fi
# Mensaje final
echo "Fin :)"
- 1. Comentarios y declaración de archivo
#!/bin/bash
: Indica que el script se ejecutará usando el intérprete de Bash.# File: demo.sh
: Un comentario que indica el nombre del archivo del script.- 2. Mostrar el archivo y número de argumentos
echo "Archivo a procesar > $@"
: Muestra el nombre del archivo que se pasará como argumento al script.$@
representa todos los argumentos pasados al script.echo "Numero de argumentos: $#"
: Muestra cuántos argumentos ha recibido el script.$#
indica el número de argumentos.- 3. Contar secuencias y separar malas lecturas
numero_secuencias=$(grep -c '^@SRR098026' $@)
: Usagrep
para contar cuántas secuencias empiezan con@SRR098026
en el archivo (probablemente sea un prefijo en un archivo FASTQ que identifica secuencias de interés).-c
cuenta las coincidencias.grep -B1 -A2 NNNNNNNNNN $@ > malas_lecturas.fastq
: Busca secuencias de calidad baja o problemáticas (que contengan 10 nucleótidos seguidos deN
, que representan bases no determinadas).-B1
: Muestra 1 línea antes de cada coincidencia deNNNNNNNNNN
.-A2
: Muestra 2 líneas después de la coincidencia.El resultado se guarda en un archivo llamado
malas_lecturas.fastq
.
malas=$(cat malas_lecturas.fastq | wc -l)
: Cuenta el número total de líneas enmalas_lecturas.fastq
(esto indica la cantidad de malas lecturas encontradas).echo "Número de malas lecturas: $malas"
: Muestra la cantidad de malas lecturas encontradasecho "Numero de argumentos: $#"
: Muestra cuántos argumentos ha recibido el script.$#
indica el número de argumentos.- 4. Búsqueda de patrones
echo "Desea buscar patrones (y/n): "
: Pregunta al usuario si desea buscar patrones específicos en el archivo.read d
: Lee la respuesta del usuario y la guarda en la variabled
.if [[ $d == "y" ]]; then
: Si la respuesta es “y” (sí), el script procede a buscar los patrones.echo -e 'ACTG\nCCCCC\nNNNCNNN\nNNNGNNN\nTTTT\nTATA\nAAA' > patrones.txt
: Crea un archivopatrones.txt
que contiene una lista de secuencias de interés (patrones a buscar).grep -f patrones.txt $@ > busqueda.txt
: Busca los patrones contenidos enpatrones.txt
dentro del archivo de entrada. El resultado de la búsqueda se guarda enbusqueda.txt
.echo "Búsqueda de patrones guardada en: busqueda.txt"
: Informa al usuario que los resultados de la búsqueda se guardaron en el archivobusqueda.txt
.
else
: Si la respuesta es “n” (no), simplemente muestra un mensaje.
Este código realizará las siguientes instrucciones:
Tomará como input el nombre del archivo
./_files/secuencias_bash.fastq
de secuencias fastq para analizar.Buscará dentro del archivo provisto por el usuario las secuencias con el string @SRR098026 y las contará.
Exportará las malas secuencias a un archivo llamado
malas_lecturas.fastq
, usando el string “NNNNNNNNNN” como plantilla.Reportará el número de malas secuencias.
Luego buscaremos patrones en el archivo
buenas_lecturas.fastq
, si es que el usuario lo desea.
Paso 3. Deberías correr el script así, una vez que hayas descargado el archivo secuencias_bash.fastq
:
bash demo.sh secuencias_bash.fastq
13.2 Material suplementario
- RSG Ecuador. Scripts en Bash
- RSG Ecuador. Wildcards y Streams
- RSG Ecuador. Expresiones regulares (regex)
- Wildcard Selection in Bash