У меня есть файл 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