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 a
usando el primer campo como índice. Saltar al next
registro.
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 next
registro.
Imprime 1
el 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