![используйте gff2fasta вместо bash-скрипта для извлечения частей последовательностей ДНК из полного генома](https://rvso.com/image/109212/%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B9%D1%82%D0%B5%20gff2fasta%20%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE%20bash-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%20%D0%B4%D0%BB%D1%8F%20%D0%B8%D0%B7%D0%B2%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%87%D0%B0%D1%81%D1%82%D0%B5%D0%B9%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B5%D0%B9%20%D0%94%D0%9D%D0%9A%20%D0%B8%D0%B7%20%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%B3%D0%B5%D0%BD%D0%BE%D0%BC%D0%B0.png)
EDIT и решение
Поскольку мой изначальный вопрос был сформулирован неудачно и я пытался изобрести велосипед, я сейчас отвечу сам на свой вопрос (возможно, это поможет кому-то еще):
gff2fasta — это инструмент, который делает именно то, что мне нужно, а именно извлекает заданный фрагмент ДНК из полного генома (огромный файл в формате fasta, называемый FULLGENOME.fasta).
Если я знаю, где находится нужная мне часть, я могу создать файл TEST.gff, в котором укажу основу (здесь: sca_5_chr5_3_0), а также начало (здесь: 2390621) и конец (здесь: 2391041) моей части для gff2fasta, например:
sca_5_chr5_3_0 JGI CDS 2390621 2391041 . + 0 name "e_gw1.5.88.1"; proteinId 40463;
Тогда мне нужно только бежать.
gff2fasta.pl -gff TEST.gff -fasta FULLGENOME.fasta -out test
Затем gff2fasta получит информацию из TEST.gff и выведет нужный мне бит в файл с именем test, который будет выглядеть следующим образом:
>sca_5_chr5_3_0_2390621_2391041_F
ATGACGACCCGCGCACCCAAAGACACATACGCTCAGCCCGACTATGAGGAGGCTCACCTAGCGACGTTTGCAGCCCCAAA
AGGCTACCCTATCGAGTCTATGCTACCCCCTAGCGTGAAGAGGGAGACCTTTGAACAGGCCCTAGCCGAGTTTACCGACG
CTATCGGCAAAGATTATGTCTTTATCGGCGATGCTCTCTCTCACTACATCGATCCCTACGACATCTATATCGATGATAGT
GAGAGAAGGAGGATGCCGAGCGCGGCTGTTTGGTACGTAACGCGGCACCCATCGAAACCTAGCAGCACTGACAAGTTTCC
GCGTCTAGTCCCTCTTCGCTCGAGGAAGCTAAGCAGGCTCTCAAGGTTGCGAACAAATACGGCATTCCGATCTGGGCATT
TTCCAGAGGCAAGAACCTGGG
Спасибо terdon и всем остальным за помощь!
-------------
Это продолжение этого вопроса, с дополнительной информацией и подробностями.unix: получить символы от 10 до 80 в файле
Думаю, я почти у цели, но мне все еще нужна помощь.
Я постарался объяснить это как можно понятнее, но я понимаю, что это очень специализированный вопрос, поэтому, пожалуйста, дайте мне знать, если я смогу что-то прояснить!
У меня есть три файла:
Примечание для администратора: возможно ли загружать файлы? Я понятия не имею, как...
Одинфайл(N_haematococca_1.fasta), из которого мне нужно извлечь имя:
head -1 N_haematococca_1.fasta | cut -f4 -d'|'
В данном случае это имя:
e_gw1.5.88.1
Проблема 1: Приведенный выше код работает нормально, но у меня возникли проблемы с сохранением имени (e_gw1.5.88.1) в переменной, которую я могу использовать в дальнейшем...
Я хочу сохранить это имя в переменной, назовем ее:
firstline
Авторойфайл (Necha2_best_models.gff), в котором я хочу видеть все строки, где встречается это имя:
grep -ir "e_gw1.5.88.1" --include="Necha2*.gff" > Necha2_in_genome.list
но с именованной переменной:
grep -ir $firstline --include="Necha2*.gff" > Necha2_in_genome.list
Это работает для использования "e_gw1.5.88.1"...
Файл, который я создаю здесь, сообщает мне имя фрагмента ДНК, который я хочу вырезать (sca_5_chr5_3_0) и какой его фрагмент мне нужен (от символа номер 2390621 до символа номер 2392655). Мне нужна эта информация, чтобы получить нужные фрагменты из третьего файла
a=(`awk -F '\t' '{print $4}' Necha2_in_genome.list`)
startDNA=${a[1]}
endDNA=${a[${#a[@]}-1]}
#add 1000 or other number, depending on the problems with the gene
correctedstartDNA=$(($startDNA-1000))
correctedendDNA=$(($endDNA-1000))
Втретийфайл, из которого я хочу вырезать определенные части после ключевого слова (sca_5_chr5_3_0), в данном случае:
Благодаря Камараджу и hschou у меня теперь есть частичное решение этой проблемы:
cat Necha2_scaffolds.fasta | sed -n -e '/sca_5_chr5_3_0/,$p' | grep -v '^>' | tr -d '\n'|awk -v start="${correctedstartDNA}" -v end="${correctedendDNA}" '{print substr($0,start,end)}' RS= Necha2_scaffolds.fasta
Однако если я отлажу это с небольшими числами:
cat Necha2_scaffolds.fasta | sed -n -e '/sca_5_chr5_3_0/,$p' | grep -v '^>' | tr -d '\n'|awk -v start=10 -v end=20 '{print substr($0,start,end)}' RS= Necha2_scaffolds.fasta
Я получаю такой вывод:
r1_1_0
CCTTATCCTAGCG
nmapped
CTTATATATTAT
nmapped
TAAAAGGAGTTA
unmapped
TCTTATATAAA
unmapped
AATCTTAAGAA
Кажется, опция RS игнорируется, и для определенных строк печатаются только символы от 10 до 20. Я понятия не имею, почему выбраны эти строки.
sca_5_chr5_3_0
встречается в файле только один раз.
другие имена, которые есть, есть
>sca_66_unmapped
>sca_67_unmapped
и т. д.
Мне нужно получить эту информацию из 178 геномов, все они представляют собой огромные файлы, и поиск вручную просто невозможен.
КАК выглядят файлы:
N_haematococca_1.fasta (файл 1) — это обычный файл fasta:
>jgi|Necha2|40463|e_gw1.5.88.1
MTTRAPKDTYAQPDYEEAHLATFAAPKGYPIESMLPPSVKRETFEQALAEFTDAIGKDYVFIGDALSHYI
DPYDIYIDDSERRRMPSAAVCPSSLEEAKQALKVANKYGIPIWAFSRGKNLGYGGPSARVNGSVAFDLHR
Necha2_best_models.gff (файл 2) выглядит так (только длиннее):
sca_5_chr5_3_0 JGI exon 2390621 2390892 . + . name "e_gw1.5.88.1"; transcriptId 40463
sca_5_chr5_3_0 JGI CDS 2390621 2390892 . + 0 name "e_gw1.5.88.1"; proteinId 40463; exonNumber 1
sca_5_chr5_3_0 JGI start_codon 2390621 2390623 . + 0 name "e_gw1.5.88.1"
sca_5_chr5_3_0 JGI exon 2390949 2391041 . + . name "e_gw1.5.88.1"; transcriptId 40463
sca_5_chr5_3_0 JGI CDS 2390949 2391041 . + 2 name "e_gw1.5.88.1"; proteinId 40463; exonNumber 2
sca_5_chr5_3_0 JGI exon 2391104 2391311 . + . name "e_gw1.5.88.1"; transcriptId 40463
sca_5_chr5_3_0 JGI CDS 2391104 2391311 . + 2 name "e_gw1.5.88.1"; proteinId 40463; exonNumber 3
sca_5_chr5_3_0 JGI exon 2391380 2392367 . + . name "e_gw1.5.88.1"; transcriptId 40463
sca_5_chr5_3_0 JGI CDS 2391380 2392367 . + 0 name "e_gw1.5.88.1"; proteinId 40463; exonNumber 4
sca_5_chr5_3_0 JGI exon 2392421 2392485 . + . name "e_gw1.5.88.1"; transcriptId 40463
sca_5_chr5_3_0 JGI CDS 2392421 2392485 . + 1 name "e_gw1.5.88.1"; proteinId 40463; exonNumber 5
sca_5_chr5_3_0 JGI exon 2392541 2392657 . + . name "e_gw1.5.88.1"; transcriptId 40463
sca_5_chr5_3_0 JGI CDS 2392541 2392657 . + 0 name "e_gw1.5.88.1"; proteinId 40463; exonNumber 6
sca_5_chr5_3_0 JGI stop_codon 2392655 2392657 . + 0 name "e_gw1.5.88.1"
sca_5_chr5_3_0 JGI exon 2396205 2396730 . + . name "e_gw1.5.227.1"; transcriptId 41333
sca_5_chr5_3_0 JGI CDS 2396205 2396730 . + 0 name "e_gw1.5.227.1"; proteinId 41333; exonNumber 1
sca_5_chr5_3_0 JGI start_codon 2396205 2396207 . + 0 name "e_gw1.5.227.1"
Necha2_scaffolds.fasta (файл 3) выглядит примерно так (гораздо длиннее биты GATC...):
>sca_8_chr1_1_0
CCTTATCCTAGCGAGGATTAAGGTCCTCGAAAAGAAAGGCAAAGATATAAAGGTAATATAATAGAAGATT
AAGGTATTCTAAGTAAAGGTTATAAAGAAATAAAATAAGAAGAATATTTATAGGCTAAGAAAGACCCCCC
TAAAGGTTAAGGACTTAATATTAAGATTTAATATTCCCTAATTAATTAATATATTAATAAAAATAAAGAT
>sca_5_chr5_3_0
ATGACCACTATATCCATCGGCACAACGGCGTTAATCACATTTGGGTCTGCAATTTTCTGTTTTTGCGGTT
TTCATGTCGGTTCCAACGGGCGGAGCTCGACCAAGAATTACATACATTACGTGGCGCGAGCGCTCTACCC
TCTGGGACATGAAGGGGACGAGGAGTCTGGAGAGGTTCATGTTTGGAATCACAGCATGGTACTGCGGCAC
CCTACCTTGGTCATTCGTTGGTCTCTTTTTTTCAGGGTATGGACGCAGACTCTCAGACTCGCTCTGCTTT
>sca_67_unmapped
CTACAGGAAGCCCTAGAGGCCCTGCAAGACCTTCCAAAGCAGCACTCTTTGCTTCTTCTTAGAGGCAGTA
TCCAGCTTCTTCTAAGGCACCTCCAGAGGCAGCTAGACCCAACCGGGCTAAAAGACCTTTGGGAAGAGGC
TAATACCCTTATAAGAGAGGCTATTATAGCCCTAGTGGCTAGAAGCCCTAGTGAGAGCCCTAAAGAGCCT
AATTCAAGCCTTATAGCCCTTCCAGTCAGAGAGGGAGGCCTAGGAATACCCTTACACAAGGACCTAGCCC
Ожидаемый конечный результат: Отдельный фрагмент текста после ключевого слова >sca_5_chr5_3_0
TTCATGTCGGTTCCAACGGGCGGAGCTCGACCAAGAATTACATACATTACGTGGCGCGAGCGCTCTACCC
TCTGGGACATGAAGGGGACGAGGAGTCTGGAGAGGTTCATGTTTGGAATCACAGCATGGTACTGCGGCAC
CCTACCTTGGTCATTCGTTGGTCTCTTTTTTTCAGGGTATGGACGCAGACTCTCAG