先描述我的项目内容:
- 将50bp长的DNA序列进行单次比对(linux环境,算法gapmis已经写好);
- 500万个基因序列文件单次比对,会耗费大量I/O时间。为此希望将1万条基因数据保存在一个AT50_1_0.fasta文件中,每一条基因数据单独保存为一行,如下图所示:
- 依次提取各行数据,并调用比对算法gapmis,输出每一行的比对结果。
“将包含一条基因数据的文件依次进行比对,转化成二维数据进行比对”,直接目前存在的问题:
- linux环境下,是否可以编写c循环程序:对.fa中的文件按行读取?
- “.fa”文件格式说明:按照“>”标识来界定是否为一条基因数据。如果只有一个“>”,判定只存在一条基因数据;
- gapsmis程序在linux环境下的比对命令为:"./gapsmis -a a.fasta -b b.fasta" (将序列a与序列b进行比对)。换句话说:我们需要修改gapsmis程序接口,将命令中的“文件名”输入形式,转换为“基因字符串”输入形式。
(具体解决思路,等我实现再补充,各位大佬见谅)
下面补充一个问题以及解决方案:如何通过基因ID文件从fasta文件中提取特定的基因?
概念介绍:
-
.fa文件格式:
“>基因ID 基因序列” 如下图:AT50_0就是基因ID
解决思路:
- 访问网址http://hgdownload.cse.ucsc.ed...
- 下载faSomeRecords脚本:faSomeRecords.txt
- 将txt后缀删除(这里为了上传方便),拷贝到指定的文件夹,运行命令行:
- $ chmod +x faSomeRecords #赋予文件可执行权限,为Linux系统下执行
-
执行如下命令,进行数据处理
./faSomeRecords AT_50_1_a.fasta ID.txt query.fasta #其中AT_50_1_a.fasta是原始的fasta文件,ID.txt列入了需要查找的基因ID,每行一个,query.fasta为输出文件,包含对应ID的序列信息。
linux操作图:
AT_50_1_a.fasta是原始的fasta文件:
ID.txt列入了需要查找的基因ID:
query.fasta为输出文件:
最终从原始文件提取出基因ID为:AT50_0,AT50_5的基因序列,并将结果保存在query.fasta文件中。
注:本文参考科学网陈振玺博客:http://blog.sciencenet.cn/blo... Tanvir Ahamed博士在biostarts中的回复(https://www.biostars.org/p/12...),实际操作后整理所得。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。