Замена последовательных идентификаторов файла fasta на новые идентификаторы из списка

Замена последовательных идентификаторов файла fasta на новые идентификаторы из списка

У меня есть файл fasta, и я хочу заменить seq Ids (строки описания) на новые и расширенные ID. Это формат файла fasta:

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

и хотите достичь нового фаста в следующем формате:

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

Это означает, что, например, 3C-assembly|contig_74 следует заменить на Scaffold_001 [Sex=Female] [Unplaced scaffold]. Для этой цели я создал текстовый файл, включающий два столбца (разделенные табуляцией), связывающих эти два 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]
......................

Есть ли у вас какие-либо идеи, как я могу использовать этот текстовый файл для замены идентификаторов в моем файле fasta. Спасибо

решение1

С использованием awk:

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

Сначала прочитайте текстовый файл, содержащий сопоставление, и сохраните второе поле в массиве, aиспользуя первое поле в качестве индекса. Перейдите к nextзаписи.

Затем прочитайте файл fasta. Если запись начинается с >, найдите новый идентификатор из массива, удалив первый символ из текущей записи ( substr($0, 2)) и используя это значение как индекс массива.
Если идентификатор не пустой, выведите >идентификатор и перейдите к nextзаписи.

Печатает 1текущую запись (последовательности или несовпадающие идентификаторы).

решение2

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

Связанный контент