将 multifasta 文件拆分为具有相同数量的加入号的文件

LDT*_*LDT 5 python bash awk biopython

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

看起来像这样..

>NC_033829.1 Kallithea virus isolate DrosEU46_Kharkiv_2014, complete genome
AGTCAGCAACGTCGATGTGGCGTACAATTTCTTGATTACATTTTTGTTCCTAACAAAATGTTGATATACT

>NC_020414.2 Escherichia phage UAB_Phi78, complete genome
TAGGCGTGTGTCAGGTCTCTCGGCCTCGGCCTCGCCGGGATGTCCCCATAGGGTGCCTGTGGGCGCTAGG

Run Code Online (Sandbox Code Playgroud)

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

awk -F '|' '/^>/ {F=sprintf("%s.fasta",$2); print > F;next;} {print >> F;}' < yourfile.fa
Run Code Online (Sandbox Code Playgroud)

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

任何想法或评论表示赞赏

Ed *_*ton 3

从您的问题中尚不清楚每个输入块的“登录号”是唯一的(不要假设阅读您问题的人了解有关您的域的任何信息 - 对我们来说这只是文本行)。如果您的问题只是说您希望每个输出文件有 5000 个换行符分隔的块而不是 5000 个登录号,那么情况会更清楚。

看到您发布的答案后,现在很清楚您应该使用以下内容:

awk -v RS= -v ORS='\n\n' '
    (NR%5000) == 1 { close(out); out="myseq"(++n_seq)".fa" }
    { print > out }
' my_sequences.fa
Run Code Online (Sandbox Code Playgroud)