Как заказать несколько файлов выравнивания Fasta

Я уверен, что это легко сделать, но у меня очень ограниченный опыт в биоинформатике.

У меня есть много 100 000 файлов FASTA, содержащих выравнивания разных генов одних и тех же 12 видов. Каждый файл выглядит примерно так:

>dmel
ACTTTTGATACAATTAAC
>dsim
AATCCCAGACAAATTAAG
>dsec
AGTTTTGCAATGGTAAAT
>dere
TGGAATATTAGACGAATT 
...

Не все файлы упорядочены одинаково, и я бы хотел, чтобы они были такими. Их можно отсортировать по алфавиту, если это проще, не имеет значения, как они упорядочены, если все файлы отсортированы одинаково. По алфавиту должно быть так:

>dere
TGGAATATTAGACGAATT
>dmel
ACTTTTGATACAATTAAC
>dsec
AGTTTTGCAATGGTAAAT
>dsim
AATCCCAGACAAATTAAG
...

Любой сценарий, который делает это автоматически, будет высоко оценен.

Изменить: я использовал сценарий оболочки с использованием sed, который работает, но проблематичен. Это работает, когда количество файлов не так велико, но в этом конкретном случае он создает дубликаты файлов с разными именами. Сценарий гласит:

#!/bin/bash
echo
for i in {0..114172}; do
#sed -e '$ d' bloque.fasta.trim$i >b0.fasta.trim
#sed -e 's/ /ñ/g' <b0.fasta.trim >b1.fasta.trim
sed -e 's/ /ñ/g' <bloque.fasta.trim$i >b1.fasta.trim
tr "\n" " " <b1.fasta.trim >b2.fasta.trim
sed -e 's/ //g' < b2.fasta.trim >b3.fasta.trim
sed -e 's/>/\n>/g' < b3.fasta.trim >b4.fasta.trim
sed '1d' b4.fasta.trim >b5.fasta.trim
sort b5.fasta.trim >b6.fasta.trim 
sed -e 's/ñ/\n/g' < b6.fasta.trim >b7.fasta.trim$i
done

Неупорядоченные файлы называются bloque.fasta.trim, этот скрипт создает группу файлов с именем b7.fasta.trim$, которые должны создать один файл b7. файл для каждого блока. файл. Проблема в том, что иногда он дублирует файл, но называет их по-разному. Я уверен, что есть более простой подход, который не делает ошибок дублирования.


person NKGon    schedule 01.09.2016    source источник
comment
Попробуйте BioStar или SEQanswers. Если вам нужно решение от Stack Overflow, вам нужно указать язык программирования и показать свою попытку кодирования.   -  person Chris_Rands    schedule 01.09.2016
comment
Хорошо, я отредактировал сообщение, чтобы показать мой скрипт sed, который работает, но с ограничениями.   -  person NKGon    schedule 01.09.2016


Ответы (1)


Любой сценарий, который делает это автоматически, будет высоко оценен.

Я не знаю, если это именно то, что вы хотите, но файлы fasta легко сортировать с помощью biopython.

Сначала установите модуль:

# If using debian/ubuntu
sudo apt-get install python-biopython

# If other operational system, install pip and
pip install biopython

Теперь запишите этот код в файл, например: fasta_sorter.py

from Bio import SeqIO
import sys

infile = sys.argv[1]

records = SeqIO.parse(open(infile, 'r'), 'fasta')

records_dict = SeqIO.to_dict(records)

for rec in sorted(records_dict):
    print ">%s\n%s" % (rec, records_dict[rec].seq)

После этого вы можете отсортировать каждый из ваших файлов с помощью:

python fasta_sorter.py /path/to/your.fasta > file.sorted.fasta

Вы можете поместить его в цикл for.

person taniguti    schedule 01.09.2016
comment
Это сработало, спасибо. Это заняло довольно много времени, около 2 часов, и выдавало следующее сообщение об ошибке для каждого файла Traceback (последний последний вызов): Файл fasta_sorter.py, строка 6, в ‹module› records = SeqIO.parse(open(infile, ' r'), 'fasta') IOError: [Errno 2] Нет такого файла или каталога: 'bloque.fasta.trim114172' - person NKGon; 01.09.2016
comment
@NKGon, похоже, у вас нет файлов, используемых в качестве входных данных для сортировщика. например: bloque.fasta.trim114172 - person taniguti; 02.09.2016
comment
Я так и думал, но файлы есть и выходной файл тоже создан. У меня нет объяснения, но как-то это работает. - person NKGon; 02.09.2016