搜索
查看: 3218|回复: 1

把fasta文件按照序列拆分成小文件很容易,但是~~~

[复制链接]

634

主题

1182

帖子

4030

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4030
发表于 2017-5-26 18:24:38 | 显示全部楼层 |阅读模式
把fasta文件按照序列拆分成小文件很容易,真的很容易:
[Shell] 纯文本查看 复制代码
cat ~/genomes/human_g1k_v37.fasta | awk 'BEGIN { CHROM="" } { if ($1~"^>") CHROM=substr($1,2); print $0 > CHROM".fa" }'

但是,如果是把bed文件按照染色体拆分呢?
一条染色体会出现多次,而且在文件里面是随机出现的。
就是我们的编程题目,生信编程直播第11题:把文件内容按照染色体分开写出其实也可以很简单,但是一般人shell里面的awk不会学的这么好~



上一篇:shiny创造一个网页版热图-就可以灌水plos one啦
下一篇:R里面代码运行时间的测定
你这个问题很复杂,需要打赏,请点击 http://www.bio-info-trainee.com/donate 进行打赏,谢谢
回复

使用道具 举报

1

主题

15

帖子

154

积分

注册会员

Rank: 2

积分
154
发表于 2017-5-29 11:25:00 | 显示全部楼层
前几天刚写了个代码分割文件来应对在线注释网站对上传文件的大小的限制,可以根据你输入的序列数,文件数目,自动分割生成一系列的小文件
使用方法 python 代码 输入的原始序列文件 每个小文件的序列数目 小文件的数目
[Python] 纯文本查看 复制代码
import sys
args = sys.argv
k =1
i =0
g =0
infile = args[1]
num = int(args[2])
file_num = int(args[3])
lst = []
for j in range(file_num):
    file_name = str(k)+'.fa'
    # print out
    out = open(file_name,'w')
    lst.append(file_name)
    k=k+1
    out.close
f = 0
with open(infile, 'r') as inf:
    for line in inf:
        with open(lst[f],'a') as o:
            if line.startswith('>'):
                i += 1
            if (0 +g)  <= i <  (g+ num):
                o.write(line)
            if i >= g+num:
                g += num
                f +=1
                o.close()
                with open(lst[f], 'a') as o:
                    o.write(line)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-10-19 08:51 , Processed in 0.031099 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.