首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多快捷键文件拆分为具有相同访问号的文件

将多快捷键文件拆分为具有相同访问号的文件
EN

Stack Overflow用户
提问于 2021-07-25 19:36:15
回答 4查看 191关注 0票数 6

我有一个有数千个登录号的文件:

看起来像这样..。

代码语言:javascript
复制
>NC_033829.1 Kallithea virus isolate DrosEU46_Kharkiv_2014, complete genome
AGTCAGCAACGTCGATGTGGCGTACAATTTCTTGATTACATTTTTGTTCCTAACAAAATGTTGATATACT

>NC_020414.2 Escherichia phage UAB_Phi78, complete genome
TAGGCGTGTGTCAGGTCTCTCGGCCTCGGCCTCGCCGGGATGTCCCCATAGGGTGCCTGTGGGCGCTAGG

如果要将其拆分为多个文件,每个文件都有一个登录号,那么我可以使用以下代码

代码语言:javascript
复制
awk -F '|' '/^>/ {F=sprintf("%s.fasta",$2); print > F;next;} {print >> F;}' < yourfile.fa

我有一个具有数千个登录号(又名>NC_*)的文件,并希望将其拆分,因为每个文件都包含大约5000个登录号。由于我对awk/bash/python还是新手,所以我很难找到一个简洁的解决方案。

如有任何意见或评论,请见谅

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-07-27 12:39:28

从你的问题中还不清楚“登录号”是每个输入块中唯一的(不要假设阅读你的问题的人知道你的域名--对我们来说这只是一行文字)。如果你说你的问题只是说你想要每个输出文件5000个新行分隔块,而不是5000个加入号,那就更清楚了。

在看了你发布的答案之后,现在很清楚,这就是你应该使用的内容:

代码语言:javascript
复制
awk -v RS= -v ORS='\n\n' '
    (NR%5000) == 1 { close(out); out="myseq"(++n_seq)".fa" }
    { print > out }
' my_sequences.fa
票数 3
EN

Stack Overflow用户

发布于 2021-07-25 20:11:43

假设:区段由空行分隔。

算法:

  • 分段拆分文件
  • 从分段摘录加入号
  • 输出部分到以登录号命名的文件名。

Awk术语:“记录”将是我们的部分-文件的一部分,由空行分隔(即两个换行符一个接一个。“字段”通常用空格分隔--通过空格或>字符分隔,第二个字段将是登录号。

只需将记录分隔符设置为两个新行,将字段分隔符设置为>或space,然后将该行输出到以第二个字段命名的文件中:

代码语言:javascript
复制
awk -v RS='' -v FS='[> ]' '{f=($2 ".txt"); print >> f; close(f)}'

@编辑将>更改为>>RS='\n\n'更改为RS=''

@编辑并添加close

票数 2
EN

Stack Overflow用户

发布于 2021-07-30 14:29:51

最好使用Biopython的Bio.SeqIO来处理FASTA文件的读写。然后,您所需要的只是按需要对记录(SeqRecord对象)进行分组。我倾向于使用分组函数产生迭代器:

代码语言:javascript
复制
from itertools import chain, islice

from Bio import SeqIO


def grouper(n, iterable):
    it = iter(iterable)
    while True:
        chunk_it = islice(it, n)
        try:
            first = next(chunk_it)
        except StopIteration:
            return
        yield chain((first,), chunk_it)


for idx, group in enumerate(grouper(5000, SeqIO.parse('input.fa', 'fasta')), 1):
    SeqIO.write(group, f'out-{idx}.fa', 'fasta')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68521944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档