【发布时间】:2021-11-26 23:45:38
【问题描述】:
我有一个包含 50 多个 FASTA 文件的文件夹,每个文件中包含 2-8 个 FASTA 序列,这是一个示例:
testFOR.id_AH004930.fasta
>AH004930|2:1-128_Miopithecus_talapoin
ATGA
>AH004930|2:237-401_Miopithecus_talapoin
GGGT
>AH004930|2:502-580_Miopithecus_talapoin
CTTTGCT
>AH004930|2:681-747_Miopithecus_talapoin
GGTG
testFOR.id_M95099.fasta
>M95099|1:1-90_Homo_sapien
TCTTTGC
>M95099|1:100-243_Homo_sapien
ATGGTCTTTGAA
它们都是根据 ID 号(在本例中为 AH004930 和 M95099)分组的,我已经使用 HERE 找到的非常方便的 seqkit 代码从原始原始 multiFASTA 文件中提取出来。
我的目标是:
- 使用
cat将这些序列放在文件中,如下所示:
>AH004930|2:1-128_Miopithecus_talapoin
ATGAGGGTCTTTGCTGGTG
>M95099|1:1-90_Homo_sapien
TCTTTGCATGGTCTTTGAA
(我不关心核苷酸的位置,我关心的是ID和物种名称!)
- 将此结果打印到新的 FASTA 文件中。
理想情况下,我真的很想将所有这 50 个文件压缩成 1 个 FASTA,然后我可以继续过滤/对齐:
GENE_L.fasta
>AH004930|2:1-128_Miopithecus_talapoin
ATGAGGGTCTTTGCTGGTG
>M95099|1:1-90_Homo_sapien
TCTTTGCATGGTCTTTGAA
....
到目前为止,我已经找到了一种方法来实现我想要的,但一次只有一个文件(使用此代码:cat myfile.fasta | sed -e '1!{/^>.*/d;}' | sed ':a;N;$!ba;s/\n//2g' > output.fasta,我很遗憾失去了信用的链接)但是很多这些文件名非常相似,所以如果我手动完成,我会不可避免地错过一些/它会太慢。
我试图把它放到一个循环中,它有点在那里!但它的作用是对每个 FASTA 文件进行分类,将其放入一个新文件中,但只保留第一个标题,给我留下大量拼接在一起的序列;
for FILE in *; do cat *.fasta| sed -e '1!{/^>.*/d;}'| sed ':a;N;$!ba;s/\n//2g' > output.fasta; done
output.fasta
>AH004930|2:1-128_Miopithecus_talapoin
ATGAGGGTCTTTGCTGGTGTCTTTGCATGGTCTTTGAAGGTCTTTGAAATGAGTGGT...
我想知道是否制作一个类似于 HERE 的循环会不会有什么好处,但我真的不确定如何让它在打开新文件后打印每个标题。
我怎样才能对这些序列进行分类,将它们打印到一个新文件中并仍然保留这些标题? 我非常感谢任何关于我在循环中出错的地方以及任何适合 zsh shell 的解决方案的建议!我对任何 python 或 linux 解决方案持开放态度。提前谢谢你
【问题讨论】:
-
如果您能更详细地解释这些输入是如何形成预期输出的,那么对于我们这些了解 Unix 文本工具但不太了解生物信息学的人来说,您的问题会更清楚。
-
@tripleee 这是一个很好的观点,我想我现在已经找到了解决方案(由用户@potong 提供),但最好多解释一下。我会为遇到它的人相应地更新我的问题
标签: python loops sed cat fasta