1

我确信这是一件容易做的事情,但我的生物信息学经验非常有限。

我有许多 -100,000- FASTA 文件,其中包含相同 12 个物种的不同基因的比对。每个文件看起来像这样:

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

并非所有文件都以相同的方式排序,我希望它们都是。如果这更容易,它们可以按字母顺序排序,只要所有文件均等排序,它们的排序方式并不重要。按字母顺序应该是这样的:

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

任何自动执行此操作的脚本将不胜感激。

编辑:我一直在使用使用 sed 的 shell 脚本,该脚本有效但有问题。当文件数量不是很大时,它可以工作,但在这种特殊情况下,它会创建具有不同名称的重复文件。脚本内容如下:

#!/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。每个块的文件。文件。问题是有时它会复制一个文件但名称不同。我相信大多数情况下都会有一种更简单的方法,不会出现重复错误。

4

1 回答 1

1

任何自动执行此操作的脚本将不胜感激。

我不知道这是否正是您想要的,但是使用 biopython 对 fasta 文件进行排序很容易。

首先,安装模块:

# 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 循环中。

于 2016-09-01T17:08:15.397 回答