我有两个文件 第一个是包含 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 中的完整的一条输入新建的文件里面。
实验室最近新开始搞一部分生物信息的东西,零基础开始学习,头秃,请大神帮助。
1
crella 2019-11-25 00:56:06 +08:00 via Android
你至少要说明用什么语言啊,要不然怎么给代码?按你的描述我觉得还不太难。
|
2
crella 2019-11-25 01:17:06 +08:00 via Android
https://paste.ubuntu.com/p/kv5fYY9vhH/
理想情况可以这样。要想处理好异常,又要跑得快,就得改改。 |
3
crella 2019-11-25 01:21:13 +08:00 via Android 1
|
4
imlm OP 语言,这个倒是无所谓,自己用 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; |
5
imlm OP 话说谢谢你们的帮助。
|
6
crella 2019-11-25 08:25:28 +08:00 via Android
perl 对于多行同时读入文本,反正我是搜索不到好的方法。隔壁 ruby 可以 readlines 一次性读取所有行并切割为数组,又可以 while line = fileio.gets,逐行读取。真香。perl 好多东西搜不到啊。
|
7
imlm OP @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() |
9
crella 2019-11-25 19:51:43 +08:00
@imlm 不好意思啊,昨晚没电脑,手机码的。把 serials.each( |cur_serial| 的(改成{,即大括号。
要不你把示例数据压缩包上传网盘,我再测试一下? |
10
crella 2019-11-25 19:59:46 +08:00
额,电脑才看明白你的生物序列之间是空格还是换行……
|