我有一个文件夹,其中包含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)进行分组的,我使用非常方便的seqkit代码HERE从原始的multifsata文件中提取了ID号
我的目标是:
cat
将这些序列放在文件中,如下所示:>AH004930|2:1-128_Miopithecus_talapoin
ATGAGGGTCTTTGCTGGTG
>M95099|1:1-90_Homo_sapien
TCTTTGCATGGTCTTTGAA
(我不在乎核苷酸的位置,我只在乎ID和物种名称!)
理想情况下,我真的希望将所有这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解决方案都持开放态度。先谢谢你
我不确定我是否完全理解您的问题,但如果您只是想将多个文件中的内容连接到一个文件中,我相信下面的(Python)代码应该可以工作:
这可能适用于您(GNU-sed):
将
-s
设置为分别处理每个文件复制第一行
删除包含
>
的任何其他行将所有其他行附加到第一行
删除除最后一行之外的这些行
在文件末尾,切换到副本并删除除第一行以外的所有换行符
对所有文件重复此操作
非GNU SED的替代方案:
注意:MacOS sed可能需要放在脚本中,并使用
-f
选项调用,或者使用-e
选项(减去;
命令)将其拆分为多个部分,您的运气可能会有所不同或许:
相关问题 更多 >
编程相关推荐