# Mostrar todo el contenido de un archivo
cat archivo.txt
# Mostrar múltiples archivos
cat archivo1.txt archivo2.txt
# Mostrar con números de línea
cat -n secuencias.fasta
7 Procesamiento de texto
El procesamiento de texto es fundamental en bioinformática. La mayoría de nuestros datos están en formato texto: secuencias FASTA, archivos de metadatos, resultados de análisis, logs de programas, etc. Dominar estos comandos te permitirá explorar y manipular datos de manera eficiente.
7.1 Visualización de Archivos de Texto
7.1.1 cat
- Mostrar contenido completo
Ejemplo:
# Ejemplo con archivo FASTA
cat multi.fasta
Resultado esperado:
>sequenceID-001 description
AAGTAGGAATAATATCTTATCATTATAGATAAAAACCTTCTGAATTTGCTTAGTGTGTAT
ACGACTAGACATATATCAGCTCGCCGATTATTTGGATTATTCCCTG
>sequenceID-002 description
CAGTAAAGAGTGGATGTAAGAACCGTCCGATCTACCAGATGTGATAGAGGTTGCCAGTAC
AAAAATTGCATAATAATTGATTAATCCTTTAATATTGTTTAGAATATATCCGTCAGATAA
TCCTAAAAATAACGATATGATGGCGGAAATCGTC
>sequenceID-003 description
CTTCAATTACCCTGCTGACGCGAGATACCTTATGCATCGAAGGTAAAGCGATGAATTTAT
CCAAGGTTTTAATTTG
Opciones útiles de cat
:
-n
: numerar líneas-b
: numerar solo líneas no vacías-A
: mostrar todos los caracteres no imprimibles-s
: comprimir múltiples líneas vacías en una
7.1.2 head
- Mostrar las primeras líneas
# Primeras 10 líneas (por defecto)
head archivo.txt
# Primeras n líneas específicas
head -n 20 archivo.txt
head -20 archivo.txt # Forma abreviada
# Múltiples archivos
head -5 *.fasta
Ejemplo:
# Ver encabezados de archivos FASTA
head -2 multi.fasta
Resultado esperado:
>sequenceID-001 description
AAGTAGGAATAATATCTTATCATTATAGATAAAAACCTTCTGAATTTGCTTAGTGTGTAT
Ejemplo:
# Verificar formato de archivo de calidad
head -4 fastq.fq
Resultado esperado:
@HWI-ST999:102:D1N6AACXX:1:1101:1235:1936 1:N:0:
ATGTCTCCTGGACCCCTCTGTGCCCAAGCTCCTCATGCATCCTCCTCAGCAACTTGTCCTGTAGCTGAGGCTCACTGACTACCAGCTGCAG
+
1:DAADDDF<B<AGF=FGIEHCCD9DG=1E9?D>CF@HHG??B<GEBGHCG;;CDB8==C@@>>GII@@5?A?@B>CEDCFCC:;?CCCAC
7.1.3 tail
- Mostrar las últimas líneas
# Últimas 10 líneas (por defecto)
tail archivo.txt
# Últimas n líneas específicas
tail -n 15 archivo.txt
# Seguimiento en tiempo real (útil para logs)
tail -f analysis.log
# Empezar desde una línea específica
tail -n +100 archivo.txt # Desde la línea 100 hasta el final
Ejemplo:
# Ver encabezados de archivos FASTA
tail -5 multi.fasta
Resultado esperado:
AAAAATTGCATAATAATTGATTAATCCTTTAATATTGTTTAGAATATATCCGTCAGATAA
TCCTAAAAATAACGATATGATGGCGGAAATCGTC
>sequenceID-003 description
CTTCAATTACCCTGCTGACGCGAGATACCTTATGCATCGAAGGTAAAGCGATGAATTTAT
CCAAGGTTTTAATTTG
Ejemplo:
# Verificar formato de archivo de calidad
tail -4 fastq.fq
Resultado esperado:
@OBIWAN:24:D1KUMACXX:3:1112:9698:62774 1:N:0:
TAATATGGCTAATGCCCTAATCTTAGTGTGCCCAACCCACTTACTAACAAATAACTAACATTAAGATCGGAAGAGCACACGTCTGAACTCAGTCACTGACC
+
CCCFFFFFHHHHHIJJJJJJJJJJJJIIHHIJJJJJJJJJJJJJJJJJJJJIJJJJJJIJJJJIJJJJJJJHHHHFDFFEDEDDDDDDDDDDDDDDDDDDC
7.2 Redireccionamiento y Pipes
7.2.1 Operadores de Redireccionamiento
- > : Redirigir salida (sobrescribir)
- >> : Redirigir salida (anexar)
- < : Redirigir entrada
# >
cat sequences1.fasta > combined_sequences.fasta
# >>
cat sequences2.fasta >> combined_sequences.fasta
# <
sort < sample_list.txt
Ejemplo:
# Crear una lista de IDs
grep ">" Neucr2_GeneCatalog_CDS_20130412.fasta > IDs_CDS-fasta.txt
# Visualizamos las 5 primeras líneas
head -5 IDs_CDS-fasta.txt
Resultado inesperado:
>jgi|Neucr2|411|NCU10129T0
>jgi|Neucr2|412|NCU09901T0
>jgi|Neucr2|413|NCU09903T0
>jgi|Neucr2|414|NCU11134T0
>jgi|Neucr2|415|NCU09904T0
Ejemplo:
# Crear lista de archivos de Neurospora
ls Neucr2* > "files.txt"
# Vemos el archivo completo
cat files.txt
Resultado esperado:
Neucr2_AssemblyScaffolds.fasta.gz
Neucr2_AssemblyScaffolds_Repeatmasked.fasta.gz
Neucr2.filtered_proteins.BroadModels.gff3.gz
Neucr2_GeneCatalog_CDS_20130412.fasta
Neucr2_GeneCatalog_genes_20130412.gff.gz
Neucr2_GeneCatalog_proteins_20130412.aa.fasta.gz
Neucr2_GeneCatalog_proteins_20130412_GO.tab.gz
Neucr2_GeneCatalog_proteins_20130412_IPR.tab.gz
Neucr2_GeneCatalog_proteins_20130412_KEGG.tab.gz
Neucr2_GeneCatalog_proteins_20130412_KOG.tab.gz
Neucr2_GeneCatalog_proteins_20130412_SigP.tab.gz
Neucr2_GeneCatalog_transcripts_20130412.nt.fasta.gz
Ejemplo:
# Crear archivo de configuración
echo "threads=8" > config.txt
echo "memory=16G" >> config.txt
echo "output_dir=/results/" >> config.txt
Resultado esperado:
threads=8
memory=16G
output_dir=/results/
7.2.2 Pipes (|
) - Conectar comandos
# Pipe básico: salida de un comando como entrada del siguiente
comando1 | comando2
Ejemplo:
# Contar número de secuencias en archivo FASTA
grep "^>" Neucr2_GeneCatalog_CDS_20130412.fasta | wc -l
Resultado esperado:
10785
Ejemplo:
# Ver secuencias ordenadas alfabéticamente y ver las primeras 5
grep "^>" Neucr2_GeneCatalog_CDS_20130412.fasta | sort | head -5
Resultados esperados:
>jgi|Neucr2|10000|NCU05018T0
>jgi|Neucr2|10001|NCU05017T0
>jgi|Neucr2|10002|NCU05016T0
>jgi|Neucr2|10003|NCU05015T0
>jgi|Neucr2|10004|NCU05014T0
7.3 Comandos Avanzados de Procesamiento
7.3.1 sort
- Ordenar contenido
# Ordenamiento básico
sort archivo.txt
# Ordenamiento numérico
sort -n numeros.txt
# Ordenamiento reverso
sort -r archivo.txt
7.3.2 cut
- Extraer columnas
# Extraer columnas específicas
cut -f1,3 archivo.tsv # Columnas 1 y 3
cut -d',' -f2 archivo.csv # Segunda columna de CSV
cut -c1-10 archivo.txt # Caracteres 1-10
7.3.3 paste
- Combinar archivos por columnas
# Combinar archivos lado a lado
paste file1.txt file2.txt
# Con delimitador específico
paste -d',' file1.txt file2.txt
7.3.4 tr
- Transformar caracteres
# Convertir mayúsculas a minúsculas
tr 'A-Z' 'a-z' < archivo.txt
# Eliminar caracteres específicos
tr -d '\r' < archivo_windows.txt > archivo_unix.txt
# Reemplazar caracteres
tr ' ' '_' < nombres_con_espacios.txt
7.4 Casos de Uso Prácticos Avanzados
7.4.1 Análisis de archivos FASTA
# Crear archivo FASTA de prueba
cat > example_sequences.fasta << EOF
>sequence_1 Escherichia coli strain K12
ATCGATCGATCGATCGATCGATCGATCGATCGATCGATCG
GCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTAGCTA
>sequence_2 Salmonella enterica
TTCCGGAATTCCGGAATTCCGGAATTCCGGAATTCCGGAA
GGCCTTAAGGCCTTAAGGCCTTAAGGCCTTAAGGCCTTAA
>sequence_3 Bacillus subtilis
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
EOF
# Análisis básico del archivo FASTA
echo "=== Análisis de archivo FASTA ==="
# Contar secuencias
echo "Número de secuencias: $(grep -c '^>' example_sequences.fasta)"
# Listar nombres de secuencias
echo "Nombres de secuencias:"
grep '^>' example_sequences.fasta | cut -c2-
# Calcular longitud de cada secuencia
echo "Longitudes de secuencias:"
awk '/^>/ {if(seq) print header ": " length(seq); header=$0; seq=""; next} {seq=seq$0} END {print header ": " length(seq)}' example_sequences.fasta
# Composición nucleotídica
echo "Composición total:"
grep -v '^>' example_sequences.fasta | tr -d '\n' | fold -w1 | sort | uniq -c
7.4.2 Procesamiento de archivos de metadatos
cat > sample_metadata.tsv << EOF
sample_id condition batch concentration quality_score
sample_001 control 1 2.5 8.2
sample_002 treatment 1 3.2 7.9
sample_003 control 2 2.8 8.5
sample_004 treatment 2 3.1 8.0
sample_005 control 1 2.3 7.8
EOF
# Análisis de metadatos
echo "=== Análisis de metadatos ==="
# Mostrar estructura
echo "Primeras líneas:"
head -3 sample_metadata.tsv
# Contar muestras por condición
echo "Muestras por condición:"
tail -n +2 sample_metadata.tsv | cut -f2 | sort | uniq -c
# Calcular estadísticas de concentración
echo "Estadísticas de concentración:"
tail -n +2 sample_metadata.tsv | cut -f4 | sort -n | awk '
{
values[NR] = $1
sum += $1
}
END {
print "Mínimo: " values[1]
print "Máximo: " values[NR]
print "Promedio: " sum/NR
print "Mediana: " values[int(NR/2)]
}'
7.4.3 Pipeline de análisis de calidad FASTQ
# Crear archivo FASTQ de ejemplo
cat > example_reads.fastq << EOF
@read_1
ATCGATCGATCGATCGATCGATCGATCGATCGATCGATCG
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
@read_2
TTCCGGAATTCCGGAATTCCGGAATTCCGGAATTCCGGAA
+
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
@read_3
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
EOF
# Análisis básico de archivo FASTQ
echo "=== Análisis FASTQ ==="
# Contar número de lecturas
echo "Número de lecturas: $(($(wc -l < example_reads.fastq) / 4))"
# Longitud de lecturas
echo "Longitud de primera lectura: $(sed -n '2p' example_reads.fastq | wc -c)"
# Primeros 5 IDs de lecturas
echo "Primeros IDs:"
grep '^@' example_reads.fastq | head -5
# Distribución de calidad (primera posición)
echo "Distribución de calidad (primera posición):"
awk 'NR%4==0' example_reads.fastq | cut -c1 | sort | uniq -c
7.5 Editor de Texto nano
7.5.1 Uso básico de nano
# Abrir archivo existente o crear nuevo
nano archivo.txt
# Abrir archivo en línea específica
nano +25 script.py
# Modo solo lectura
nano -v archivo.txt
Comandos básicos en nano:
- Ctrl+O: Guardar
- Ctrl+X: Salir
- Ctrl+W: Buscar
- Ctrl+K: Cortar línea
- Ctrl+U: Pegar línea cortada
- Ctrl+G: Ayuda
7.6 Consejos Avanzados y Buenas Prácticas
7.6.1 Manejo eficiente de archivos grandes
# Para archivos muy grandes, usar comandos optimizados
# En lugar de cat archivo_grande.txt | grep "patrón"
# Usar directamente:
grep "patrón" archivo_grande.txt
# Para procesar archivos línea por línea sin cargar todo en memoria
while IFS= read -r line; do
# procesar línea
echo "Procesando: $line"
done < archivo_grande.txt
7.7 Recursos Adicionales
7.7.1 Comandos relacionados útiles
# wc - contar líneas, palabras, caracteres
wc -l archivo.txt # líneas
wc -w archivo.txt # palabras
wc -c archivo.txt # caracteres
# uniq - eliminar líneas duplicadas consecutivas
sort archivo.txt | uniq
# comm - comparar archivos ordenados
comm -12 archivo1.txt archivo2.txt # líneas comunes
# diff - comparar archivos
diff archivo1.txt archivo2.txt
7.8 Resumen de Comandos
Comando | Función | Ejemplo Bioinformático |
---|---|---|
cat |
Mostrar archivo completo | cat sequences.fasta |
head |
Primeras líneas | head -10 reads.fastq |
tail |
Últimas líneas | tail -f analysis.log |
less |
Navegador de archivos | less large_genome.fasta |
> |
Redirigir salida | grep "^>" file.fasta > headers.txt |
>> |
Anexar salida | echo "done" >> log.txt |
\| |
Pipe | grep "gene" file.gff \| wc -l |
nano |
Editor de texto | nano analysis_script.sh |
sort |
Ordenar | sort -k2,2n annotations.gff |
cut |
Extraer columnas | cut -f1,4,5 variants.vcf |