【问题标题】:How to order multiple Fasta alignment files如何订购多个 Fasta 对齐文件
【发布时间】:2023-12-17 20:37:01
【问题描述】:

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

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

【问题讨论】:

  • 试试 BioStar 或 SEQanswers。如果您想要 Stack Overflow 的解决方案,那么您需要说明编程语言并展示您的编码尝试。
  • 好的,我编辑了帖子以显示我的 sed 脚本有效但有限制

标签: bioinformatics fasta dna-sequence sequence-alignment


【解决方案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 循环中。

【讨论】:

  • 成功了,谢谢。花了大约 2 个小时的相当长的时间,它为每个文件 Traceback 提供了以下错误消息(最近一次调用最后一次):文件“fasta_sorter.py”,第 6 行,在 记录 = SeqIO.parse(open(infile , 'r'), 'fasta') IOError: [Errno 2] 没有这样的文件或目录:'bloque.fasta.trim114172'
  • @NKGon,似乎您没有用作分拣机输入的文件。例如:bloque.fasta.trim114172
  • 我是这么认为的,但文件在那里,并且输出文件也已创建。我没有解释,但不知何故它起作用了。