Eu tenho um arquivo fasta e quero substituir os IDs seq (linhas de descrição) por IDs novos e estendidos. Este é o formato do arquivo fasta:
>3C-assembly|contig_74
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_75
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_76
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
...................
e deseja alcançar um novo fasta com o seguinte formato:
>Scaffold_001 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_002 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_003 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
....................
Isso significa que, por exemplo, o 3C-assembly|contig_74 deve ser substituído por Scaffold_001 [Sex=Female] [Unplaced scaffold]. Para isso, construí um arquivo de texto incluindo duas colunas (delimitadas por tabulação) conectando esses dois 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]
......................
Você tem alguma ideia de como posso usar este arquivo de texto para substituir IDs no meu arquivo fasta. Obrigado
Responder1
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
Primeiro, leia o arquivo de texto que contém o mapeamento e salve o segundo campo no array a
usando o primeiro campo como índice. Pule para o next
registro.
Em seguida, leia o arquivo fasta. Se o registro começar com >
, procure o novo id do array removendo o primeiro caractere do registro atual ( substr($0, 2)
) e usando este valor como índice do array.
Se o id não estiver vazio, imprima >
o id e pule para o next
registro.
Imprime 1
o registro atual (as sequências ou ids não correspondentes).
Responder2
awk -F'\t' '
NR==FNR { map[">"$1] = ">"$2; next }
$0 in map { $0 = map[$0] }
{ print }
' mapfile fastafile