14 Bucles (for loops)
Imagina que quieres realizar una misma tarea para 3 archivos distintos, ¿no sería nada molesto escribir el mismo código 3 veces, cierto?
¿Y qué pasa si tengo que analizar y procesar docenas o cientos de archivos? Para ello puedes escribir bucles. Un bucle es una estructura de control que permite ejecutar un bloque de código rápidamente mientras se cumpla una determinada condición. En bash los bucles más comunes son for
y while.
for variable in lista_de_valores; do
# Comandos a ejecutar para cada valor en la lista
done
while [ condición ]; do
# Comandos a ejecutar mientras la condición sea verdadera
done
14.1 Actividad grupal
Retomando el ejercicio anterior, modifiquemos el código para crear un bucle para procesar los tres archivos fastq (secuencias1.fastq, secuencias2.fastq, secuencias3.fastq ) que tenemos.
Paso 1. Crear un script en Bash con el nombre bucles.sh empleando nano.
nano bucles.sh
Paso 2. Copia el siguiente código dentro del script bucle.sh
y guarda los cambios.
#!/bin/bash
# Script para analizar múltiples archivos FASTA
# Archivos a procesar
archivos=("archivo1.fasta" "archivo2.fasta" "archivo3.fasta")
# Loop para analizar cada archivo
for archivo in "${archivos[@]}"; do
echo "Archivo a procesar: $archivo"
# Verifica si el archivo existe
if [ ! -f "$archivo" ]; then
echo "El archivo $archivo no existe. Saltando..."
continue
fi
# 1. Conteo de secuencias
numero_secuencias=$(grep -c '^@SRR098026' "$archivo")
echo "Número de secuencias en $archivo: $numero_secuencias"
# 2. Separación de malas lecturas
grep -B1 -A2 'NNNNNNNNNN' "$archivo" > "malas_lecturas_$archivo"
malas=$(wc -l < "malas_lecturas_$archivo")
echo "Número de malas lecturas en $archivo: $malas"
# 3. Búsqueda de patrones
echo "Desea buscar patrones en $archivo? (y/n):"
read -r respuesta
if [[ "$respuesta" == "y" ]]; then
patrones_file="patrones_$archivo.txt"
busqueda_file="busqueda_$archivo.txt"
echo -e 'ACTG\nCCCCC\nNNNCNNN\nNNNGNNN\nTTTT\nTATA\nAAA' > "$patrones_file"
grep -f "$patrones_file" "$archivo" > "$busqueda_file"
echo "Búsqueda de patrones guardada en: $busqueda_file"
else
echo "Patrones no buscados en $archivo."
fi
echo "Procesamiento de $archivo completado."
echo "---------------------------------------"
done
# Mensaje final
echo "Metaanálisis finalizado para todos los archivos."