Reemplazo de los ID de secuencia del archivo fasta según los nuevos ID de una lista

Reemplazo de los ID de secuencia del archivo fasta según los nuevos ID de una lista

Tengo un archivo fasta y quiero reemplazar los ID de secuencia (líneas descriptivas) con ID nuevos y extendidos. Este es el formato del archivo fasta:

>3C-assembly|contig_74
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_75
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_76
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
...................

y quiero lograr una nueva fasta con el siguiente formato:

>Scaffold_001 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_002 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_003 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
....................

Significa que, por ejemplo, 3C-assembly|contig_74 debe reemplazarse por Scaffold_001 [Sexo=Mujer] [Andamio no colocado]. Para ello, creé un archivo de texto que incluye dos columnas (delimitadas por tabulaciones) que conectan estos dos IDS:

3C-assembly|contig_74   Scaffold_001 [Sex=Female] [Unplaced scaffold]
3C-assembly|contig_75   Scaffold_002 [Sex=Female] [Unplaced scaffold]
3C-assembly|contig_76   Scaffold_003 [Sex=Female] [Unplaced scaffold]
......................

¿Tiene alguna idea de cómo puedo usar este archivo de texto para reemplazar las identificaciones en mi archivo fasta? Gracias

Respuesta1

Usando awk:

awk -F'\t' '
  NR==FNR{ a[$1]=$2; next }
  /^>/{ 
    id=a[substr($0, 2)]
    if (id!=""){ print ">" id; next }
  }
  1
' textfile file.fasta

Primero, lea el archivo de texto que contiene la asignación y guarde el segundo campo en una matriz ausando el primer campo como índice. Saltar al nextregistro.

Luego lea el archivo fasta. Si el registro comienza con >, busque la nueva identificación de la matriz eliminando el primer carácter del registro actual ( substr($0, 2)) y usando este valor como índice de la matriz.
Si la identificación no está vacía, imprima >la identificación y salte al nextregistro.

Imprime 1el registro actual (las secuencias o identificadores que no coinciden).

Respuesta2

awk -F'\t' '
    NR==FNR { map[">"$1] = ">"$2; next }
    $0 in map { $0 = map[$0] }
    { print }
' mapfile fastafile

información relacionada