提取两个文件中的数据,并把完整格式存储到一个新的文件中

2019-11-24 17:17:07 +08:00
 imlm

我有两个文件 第一个是包含 unigene 序号的文件,名称为一个序号一行

CL79.Contig98_All

Unigene56947_All

CL323.Contig1_All

另一个文件里面是 All-Unigene.fa 的文件,里面数据很大,其中第一个文件的序号以及对应的序列在 All-Unigene.fa 可以找到格式为.fa 格式,如下所示

CL323.Contig1_All CTTTTTTCCAGGGAGGTGGCAGCAGTCTACGTGCTCGTTATGATCGTTTG GAATGACAAATATTTTGCAAATACTGTGGGTTTCTGTGGAATAACCTTGC TTGATTTTGCAGGTTAAACCAGCTGCAGCTGGTTTTGTTTAACACATTGT TCTCTTTCTGTAGATAGAAACAACCATG

CL447.Contig1_All AGAGAAACCTGGTCAGTTGGCTGGAGGTTTCAGCCAGAGAAGGTCTTTTA TACTGTTGTATTTGAATTTTGTGCACTTAGGCTGACTCTTCCTCTGTGTG CTGTAGGATGGAGGTGTCCTGCCTGGAGCTGGCGTTGGAGGGTGAGCGGC TCTGTAAGGTGGGCGACTACAGAGCAGGCGTCTCCTTCTTTGAAGCCGCC ATCCAGGTGGGCACAGAGGACCTGCAGGTGCTAAGTGC

我想要通过序号文件找到它在 All-Unigene.fa 文件查找到对应的序列,然后把 All-Unigene.fa 中的完整的一条输入新建的文件里面。

实验室最近新开始搞一部分生物信息的东西,零基础开始学习,头秃,请大神帮助。

1007 次点击
所在节点    问与答
11 条回复
crella
2019-11-25 00:56:06 +08:00
你至少要说明用什么语言啊,要不然怎么给代码?按你的描述我觉得还不太难。
crella
2019-11-25 01:17:06 +08:00
https://paste.ubuntu.com/p/kv5fYY9vhH/
理想情况可以这样。要想处理好异常,又要跑得快,就得改改。
crella
2019-11-25 01:21:13 +08:00
imlm
2019-11-25 07:24:10 +08:00
语言,这个倒是无所谓,自己用 Perl 弄了一个,不过感觉很差,而且不知道哪里错误了,反正没有能够出来。
#!/usr/bin/perl
use strict;
my %hash=();
open list,"<$ARGV[0]";
while (<list>){
chomp;
$hash{$_}=1; #先把需要的序列 id 放到哈希表中,id 是键所有值都设为 1
}
close list;

open unigene,"<$ARGV[1]";
$/=">";
<unigene>;
while (<unigene>){
chomp;
my $ID=(split /\n/,$_,2)[0]; #分割成两部分,以大于号为分割点,分成 id 和序列.
if (exists $hash{$ID}){ #用 exists 函数判断当前 id 在哈希键是否存在,存在输出 id 与序列,否则下一步
print ">$_\n";
}
else{
next;
}

}
close unigene;
imlm
2019-11-25 07:24:35 +08:00
话说谢谢你们的帮助。
crella
2019-11-25 08:25:28 +08:00
perl 对于多行同时读入文本,反正我是搜索不到好的方法。隔壁 ruby 可以 readlines 一次性读取所有行并切割为数组,又可以 while line = fileio.gets,逐行读取。真香。perl 好多东西搜不到啊。
imlm
2019-11-25 16:23:40 +08:00
@crella 不清楚为什么,你的两个脚本在同一个地方报错了...
syntax error, unexpected '|', expecting ')'
serials.each( |cur_serial|

syntax error,unexpected tSTRING_DEND, expecting keyword_end
syntax error,unexpected end-of-input, expecting keyword_end
serial_processor()
imlm
2019-11-25 16:39:44 +08:00
@crella 修复之后运行,不是很明白为什么一运行直接就结束了,很快的那种,然后也没有什么文件生成或者改变...
crella
2019-11-25 19:51:43 +08:00
@imlm 不好意思啊,昨晚没电脑,手机码的。把 serials.each( |cur_serial| 的(改成{,即大括号。
要不你把示例数据压缩包上传网盘,我再测试一下?
crella
2019-11-25 19:59:46 +08:00
额,电脑才看明白你的生物序列之间是空格还是换行……
imlm
2019-11-26 10:12:20 +08:00
@crella 已经可以了,自己修改了一下,嘿嘿,谢啦。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/622656

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX