# Búsqueda simple
grep "patrón" archivo.txt
# Búsqueda insensible a mayúsculas/minúsculas
grep -i "patrón" archivo.txt
# Mostrar número de línea donde aparece el patrón
grep -n "patrón" archivo.txt
# Contar ocurrencias
grep -c "patrón" archivo.txt
# Invertir búsqueda (líneas que NO contienen el patrón)
grep -v "patrón" archivo.txt
8 Búsqueda Avanzada en Archivos y Directorios
La capacidad de buscar información específica en archivos y directorios es crucial en bioinformática. Ya sea buscando secuencias específicas, genes de interés, patrones en datos experimentales, o archivos perdidos en el sistema, estas herramientas te permitirán encontrar exactamente lo que necesitas de manera eficiente.
8.1 grep
- Búsqueda de Patrones en Texto
grep
(Global Regular Expression Print) es una herramienta fundamental para buscar patrones en texto. El comando grep
encuentra e imprime líneas en archivos que coinciden con un patrón.
Ejemplo:
# Buscar secuencias específicas
grep "ATCGATCG" example_sequences.fasta
Resultado esperado:
ATCGATCGATCGATCGATCGATCGATCGATCGATCGATCG
Ejemplo:
# Contar número de secuencias en archivo FASTA
grep -c "^>" example_sequences.fasta
Resultado esperado
3
Ejemplo:
# Buscar muestras control
grep -i "control" sample_metadata.tsv
Resultado esperado:
sample_001 control 1 2.5 8.2
sample_003 control 2 2.8 8.5
sample_005 control 1 2.3 7.8
8.1.1 Opciones Avanzadas de grep
# Buscar en múltiples archivos
grep "patrón" *.txt
# Buscar recursivamente en directorios
grep -r "patrón" directorio/
# Mostrar contexto (líneas antes y después)
grep -A 3 -B 2 "patrón" archivo.txt # 3 después, 2 antes
grep -C 5 "patrón" archivo.txt # 5 líneas de contexto
# Buscar palabras completas solamente
grep -w "gen" archivo.txt # No coincidirá con "genoma"
# Buscar múltiples patrones
grep -E "patrón1|patrón2" archivo.txt
# Listar solo nombres de archivos que contienen el patrón
grep -l "patrón" *.txt
# Buscar secuencias que empiecen con ATG (codón de inicio)
grep "^ATG" coding_sequences.fasta
# Buscar anotaciones de genes en cromosoma específico
grep -w "chr1" annotations.gff
# Buscar errores en logs de análisis
grep -i -E "error|fail|exception" analysis.log
# Buscar muestras con alta calidad
grep -E "quality.*[8-9]\.[0-9]" sample_metadata.txt
8.1.2 Expresiones Regulares con grep
# Usar expresiones regulares extendidas
grep -E "patrón_complejo" archivo.txt
# Ejemplos de patrones útiles en bioinformática:
# Buscar secuencias que terminen en TAA, TAG, o TGA (codones de parada)
grep -E "(TAA|TAG|TGA)$" sequences.fasta
# Buscar IDs de muestra con formato específico (sample_001, sample_002, etc.)
grep -E "^sample_[0-9]{3}" sample_list.txt
# Buscar coordenadas genómicas (formato chr:inicio-fin)
grep -E "chr[0-9XY]+:[0-9]+-[0-9]+" coordinates.txt
# Buscar direcciones de email en metadatos
grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" contacts.txt
# Buscar fechas en formato YYYY-MM-DD
grep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}" experiment_log.txt
# Buscar números de acceso de GenBank
grep -E "[A-Z]{1,2}[0-9]{5,}" accession_numbers.txt
8.1.3 Casos Prácticos con grep
# Crear archivo de ejemplo para práctica
cat > sample_data.txt << EOF
>sequence_001 Escherichia coli K12 complete genome
ATGAAACGCATTAGCACCACCATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGA
>sequence_002 Salmonella enterica serovar Typhimurium
ATGAGCAAACAGGAAAAAACCGTGTATATGGATTTACCCAGATGCATACGGCTTCTTGA
>sequence_003 Bacillus subtilis strain 168
ATGAAAAACATTCTGACGGACTGGCGTGAACGTCCGAAAGTGCTTCTTGAAGATGGA
Quality scores: sample_001=8.5, sample_002=7.2, sample_003=9.1
Date: 2024-03-15
Contact: researcher@university.edu
EOF
# Análisis con grep:
echo "=== Análisis con grep ==="
# 1. Contar secuencias
echo "Número de secuencias: $(grep -c '^>' sample_data.txt)"
# 2. Extraer nombres de organismos
echo "Organismos encontrados:"
grep '^>' sample_data.txt | cut -d' ' -f2-4
# 3. Buscar codones de inicio
echo "Secuencias que empiezan con ATG:"
grep -c '^ATG' sample_data.txt
# 4. Buscar muestras de alta calidad (>8.0)
echo "Muestras de alta calidad:"
grep -E "sample_[0-9]+=[89]\.[0-9]" sample_data.txt
# 5. Extraer información de contacto
echo "Contacto encontrado:"
grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" sample_data.txt
8.2 find
- Búsqueda de Archivos y Directorios
find
es una herramienta poderosa para localizar (finder) archivos y directorios basándose en diversos criterios. Se diferencia de grep
, que encuentra líneas en los archivos.
# Buscar por nombre
find /ruta/directorio -name "archivo.txt"
# Buscar insensible a mayúsculas
find /ruta/directorio -iname "*.fasta"
# Buscar por tipo
find /ruta/directorio -type f # solo archivos
find /ruta/directorio -type d # solo directorios
# Buscar en directorio actual
find . -name "*.fastq"
# Buscar todos los archivos FASTA
find ~/proyectos/ -name "*.fasta" -o -name "*.fa" -o -name "*.fna"
# Buscar archivos de secuenciación
find /datos/ -name "*.fastq.gz"
# Buscar directorios de resultados
find ~/análisis/ -type d -name "*results*"
# Buscar scripts de Python
find . -name "*.py" -type f
8.2.1 Búsqueda por Atributos
# Buscar por tamaño
find . -size +100M # archivos mayores a 100MB
find . -size -1K # archivos menores a 1KB
find . -size 50M # archivos de exactamente 50MB
# Buscar por fecha de modificación
find . -mtime -7 # modificados en últimos 7 días
find . -mtime +30 # modificados hace más de 30 días
find . -newer archivo_ref # más nuevos que archivo_ref
# Buscar por permisos
find . -perm 755 # permisos específicos
find . -executable # archivos ejecutables
8.3 wc
- Contar Líneas, Palabras y Caracteres
wc
(word count) es una herramienta simple pero muy útil para obtener estadísticas básicas de archivos. Cuenta el número de líneas, palabras y caracteres de un archivo.
# Contar líneas
wc -l archivo.txt
# Contar palabras
wc -w archivo.txt
# Contar caracteres
wc -c archivo.txt
# Información completa (líneas, palabras, caracteres)
wc archivo.txt
# Múltiples archivos
wc -l *.txt
# Ejemplos en bioinformática:
# Contar secuencias en archivo FASTA
wc -l sequences.fasta # Líneas totales
grep -c "^>" sequences.fasta # Número de secuencias
# Contar lecturas en archivo FASTQ
echo "Número de lecturas: $(($(wc -l < reads.fastq) / 4))"
# Tamaño de archivos de secuencias
wc -c *.fasta | sort -n
# Contar genes anotados
wc -l annotations.gff
8.3.1 Análisis de Archivos FASTA
Ejemplo 1: Análisis de archivo FASTA
# Crear archivo de ejemplo
cat > sequences_example.fasta << 'EOF'
>seq_001|Escherichia_coli_K12|complete_genome|4641652_bp
ATGAAACGCATTAGCACCACCATTACCACCACCATCACCATTACCACAGGTAACGGTGCGGGCTGAACGGGTGAACGTACGTAATTAA
>seq_002|Salmonella_enterica_Typhimurium|chromosome|4857450_bp
ATGAGCAAACAGGAAAAAACCGTGTATATGGATTTACCCAGATGCATACGGCTTCTTGAACGTACGTAATTAG
>seq_003|Bacillus_subtilis_168|complete_genome|4215606_bp
ATGAAAAACATTCTGACGGACTGGCGTGAACGTCCGAAAGTGCTTCTTGAAGATGGAACGTACGTAATGA
>seq_004|Pseudomonas_aeruginosa_PAO1|complete_genome|6264404_bp
ATGACCACCATCACCACCATCACCATCACCATCACCATCACCGTACGTAATTAA
EOF
echo "=== Análisis de archivo FASTA ==="
# 1. Información básica
echo "Número total de secuencias: $(grep -c '^>' sequences_example.fasta)"
echo "Número total de líneas: $(wc -l < sequences_example.fasta)"
# 2. Extraer información de headers
echo -e "\nOrganismos encontrados:"
grep '^>' sequences_example.fasta | cut -d'|' -f2 | sort
# 3. Buscar secuencias con codón de inicio
echo -e "\nSecuencias que empiezan con ATG: $(grep -c '^ATG' sequences_example.fasta)"
# 4. Buscar secuencias con codones de parada específicos
echo -e "\nSecuencias que terminan con codón de parada TAA: $(grep -c 'TAA$' sequences_example.fasta)"
echo "Secuencias que terminan con codón de parada TAG: $(grep -c 'TAG$' sequences_example.fasta)"
# 5. Buscar tamaños de genoma
echo -e "\nTamaños de genoma:"
grep '^>' sequences_example.fasta | grep -E '[0-9]+_bp' | sed 's/.*|\([0-9]\+\)_bp/\1/' | sort -n
# 6. Buscar secuencias que contengan sitio específico
echo -e "\nSecuencias con sitio ACGT: $(grep -c 'ACGT' sequences_example.fasta)"
Ejemplo 2: Análisis de Anotaciones GFF
# Crear archivo GFF de ejemplo
cat > annotations_example.gff << 'EOF'
##gff-version 3
chr1 RefSeq gene 1000 3000 . + . ID=gene001;Name=insulin;biotype=protein_coding
chr1 RefSeq mRNA 1000 3000 . + . ID=transcript001;Parent=gene001
chr1 RefSeq exon 1000 1200 . + . ID=exon001;Parent=transcript001
chr1 RefSeq exon 2800 3000 . + . ID=exon002;Parent=transcript001
chr2 RefSeq gene 5000 7000 . - . ID=gene002;Name=glucagon;biotype=protein_coding
chr2 RefSeq mRNA 5000 7000 . - . ID=transcript002;Parent=gene002
chrX RefSeq gene 10000 12000 . + . ID=gene003;Name=dystrophin;biotype=protein_coding
chrY RefSeq gene 15000 16000 . + . ID=gene004;Name=sry;biotype=protein_coding
EOF
echo "=== Análisis de archivo GFF ==="
# 1. Contar diferentes tipos de elementos
echo "Genes: $(grep -c $'\tgene\t' annotations_example.gff)"
echo "mRNAs: $(grep -c $'\tmRNA\t' annotations_example.gff)"
echo "Exones: $(grep -c $'\texon\t' annotations_example.gff)"
# 2. Genes por cromosoma
echo -e "\nGenes por cromosoma:"
grep $'\tgene\t' annotations_example.gff | cut -f1 | sort | uniq -c
# 3. Genes en cromosomas sexuales
echo -e "\nGenes en cromosomas sexuales:"
grep -E "^chr[XY].*gene" annotations_example.gff | grep -o 'Name=[^;]*' | cut -d'=' -f2
# 4. Genes en cadena positiva vs negativa
echo -e "\nGenes en cadena positiva: $(grep $'\tgene\t' annotations_example.gff | grep -c $'\t+\t')"
echo "Genes en cadena negativa: $(grep $'\tgene\t' annotations_example.gff | grep -c $'\t-\t')"
# 5. Rangos de tamaño de genes
echo -e "\nTamaños de genes:"
grep $'\tgene\t' annotations_example.gff | awk '{print $5-$4+1}' | sort -n
8.4 Consejos y Buenas Prácticas
8.4.1 Mejores prácticas para búsqueda y manipulación de archivos
- Usa comillas en
grep
para patrones complejos y prueba expresiones antes de aplicarlas en scripts automatizados. find
es más eficiente cuando se limita la profundidad de búsqueda y se usan criterios bien definidos.- Para conteo rápido,
wc -l
es clave, pero para archivos FASTA y FASTQ hay métodos específicos (grep -c "^>"
y dividir líneas por 4).
8.4.2 Optimización y rendimiento
- Usa
grep -F
para cadenas literales,grep -E
para expresiones regulares avanzadas. find
con-exec cmd {} +
ejecuta comandos eficientemente en múltiples archivos.wc
combinado conawk
ysort
ayuda a obtener estadísticas rápidas.
8.4.3 Bioinformática aplicada
- Para FASTA,
grep "^>"
permite contar secuencias. - Para coordenadas genómicas,
chr[0-9XY]+:[0-9]+-[0-9]+
facilita identificación de regiones. - Para análisis de grandes volúmenes de datos, considera
ripgrep (rg)
ofd
como alternativas más rápidas.
8.4.4 Seguridad y mantenimiento
- Nunca ejecutes
rm
directamente confind
, revisa con-print
antes. - Monitorea el espacio en disco y optimiza búsquedas evitando procesos innecesarios.
- Documenta patrones y comandos clave para facilitar futuras búsquedas.
8.5 Resumen de Comandos
Comando | Función | Ejemplo Bioinformático |
---|---|---|
grep |
Búsqueda básica | grep "ATCG" sequences.fasta |
find |
Por nombre/extensión | find ~/data/ -name "*.fastq.gz" |
wc |
Líneas, palabras, caracteres | wc genome_annotation.gff |