Я пытаюсь обработать файл GTF / GFF , который загружаю из ансамбля. Усеченная версия файла выглядит так:
1 ensembl gene 5273 10061 . - . gene_id ENSGALG00000054818; gene_version 1; gene_source ensembl; gene_biotype protein_coding;
1 ensembl transcript 5273 10061 . - . gene_id ENSGALG00000054818; gene_version 1; transcript_id ENSGALT00000098984; transcript_version 1; gene_source ensembl; gene_biotype protein_coding; transcript_source ensembl; transcript_biotype protein_coding;
1 ensembl gene 58427 58617 . + . gene_id ENSGALG00000047594; gene_version 1; gene_name RF00004; gene_source ensembl; gene_biotype snRNA;
1 ensembl transcript 58427 58617 . + . gene_id ENSGALG00000047594; gene_version 1; transcript_id ENSGALT00000094382; transcript_version 1; gene_name RF00004; gene_source ensembl; gene_biotype snRNA; transcript_name RF00004-201; transcript_source ensembl; transcript_biotype snRNA;
1 ensembl exon 58427 58617 . + . gene_id ENSGALG00000047594; gene_version 1; transcript_id ENSGALT00000094382; transcript_version 1; exon_number 1; gene_name RF00004; gene_source ensembl; gene_biotype snRNA; transcript_name RF00004-201; transcript_source ensembl; transcript_biotype snRNA; exon_id ENSGALE00000460125; exon_version 1;
1 ensembl gene 63264 63454 . + . gene_id ENSGALG00000049206; gene_version 1; gene_name RF00004; gene_source ensembl; gene_biotype snRNA;
1 ensembl transcript 63264 63454 . + . gene_id ENSGALG00000049206; gene_version 1; transcript_id ENSGALT00000092780; transcript_version 1; gene_name RF00004; gene_source ensembl; gene_biotype snRNA; transcript_name RF00004-201; transcript_source ensembl; transcript_biotype snRNA;
1 ensembl exon 63264 63454 . + . gene_id ENSGALG00000049206; gene_version 1; transcript_id ENSGALT00000092780; transcript_version 1; exon_number 1; gene_name RF00004; gene_source ensembl; gene_biotype snRNA; transcript_name RF00004-201; transcript_source ensembl; transcript_biotype snRNA; exon_id ENSGALE00000501941; exon_version 1;
(Девять столбцов, разделенных табуляцией.)
В некоторых строках отсутствуют атрибуты, такие как gene_name
, transcript_id
или transcript_name
.
- Если
gene_name
отсутствует, я хочу заменить его на gene_id
,
- и если
transcript_name
отсутствует, я хотел заменить его на transcript_id
(в случае отсутствия transcript_id
он заменяется на gene_id
).
Тем не менее, информация для transcript_id
или, лучше сказать, положение этой информации неизвестно. Как бы я искал атрибут и в случае его отсутствия заменил его значением transcript_id
с неизвестной позиционной информацией
Мне удалось заменить отсутствующее значение для gene_name
значением для gene_id
следующим образом:
awk '{if (!/gene_name/) print $0, "gene_name " $10; else print $0}' input.gtf > output.gtf
Это работало довольно хорошо, но только потому, что в этом конкретном случае я знал положение значения, которое я использовал в качестве замены. Я не мог понять, как бы я достиг этого, когда позиция матча неизвестна.
Я использовал следующий код для получения неизвестной информации о местоположении, но не смог интегрировать проверку на несоответствие, как в первом примере выше:
awk '{for (i=1; i<=NF; ++i) { if ($i ~ "transcript_name") print$0,"transcript_name ", $(i+1) } }' input.gtf > output.gtf
Условие состоит в том, что только если transcript_name
еще не присутствует в строке, его следует заменить значением для transcript_id
.
Я бы очень признателен за помощь!