搜索一个数值范围并提取其行首的字符?

搜索一个数值范围并提取其行首的字符?

搜索一个数值范围并提取其行首的字符?
各位大侠:

本人是位初学者,正在为下面的任务而头痛,现请牛人示教!这虽然是个生物领域的问题,但实质是搜索一个数值范围并提取其行首的字符。

任务是这样的:从待分析的文件text1.txt中找出0.450至0.500范围内的值,并将该值所在行的rs号码拷贝出来,自动存储到名为text2.txt的文件中。

例如:在附件例子Text1.txt中搜索到0.456后,将该值所在行的rs6603234这个字符串取出来并自动存储到程序自己创建的text2.txt中。如果text1.txt还包含有更多这样的条目,如0.487,也能一并存在text2.txt中。这样一打开text2.txt就能知道有多少符合条件的rs号。

(如用Word打开Text1.txt文件,将会发现rs6603234与0.456实际上在一行)。

我想,应该就rs字符串设一个变量,有if循环结构,但是具体程序该如何写,请牛人帮我(示范一下)!本人初学,总觉力不从心,也可能是不愿动脑筋,所以一直没能写出完整的程序。

Text1.txt(的内容):
rs6603204 chrX 268440 + ncbi_b35 illumina urn:LSID:illumina.hapmap.org:Protocol:Golden_Gate_1.1.0:1 urn:LSID:illumina.hapmap.org:Assay:311013:1 urn:LSID:dcc.hapmap.org:Panel:Han_Chinese:1 QC+ A 0.156 14 G 0.844 76 90
rs2738384 chrX 268595 + ncbi_b35 perlegen urn:lsid:perlegen.hapmap.org:Protocol:Genotyping_1.0.0:2 urn:lsid:perlegen.hapmap.org:Assay:25767.4492292:1 urn:LSID:dcc.hapmap.org:Panel:Han_Chinese:2 QC+ G 0 0 A 1 86 86
rs2738364 chrX 272139 + ncbi_b35 affymetrix urn:LSID:affymetrix.hapmap.org:Protocol:genotype_protocol_1:2 urn:LSID:affymetrix.hapmap.org:Assay:SNP_A-4207891:2 urn:LSID:dcc.hapmap.org:Panel:Han_Chinese:2 QC+ G 0.156 14 C 0.844 76 90
rs6603234 chrX 272533 + ncbi_b35 illumina urn:LSID:illumina.hapmap.org:Protocol:Golden_Gate_1.1.0:1 urn:LSID:illumina.hapmap.org:Assay:311015:1 urn:LSID:dcc.hapmap.org:Panel:Han_Chinese:1 QC+ A 0.544 49 G 0.456 41 90
rs2738361 chrX 272743 + ncbi_b35 perlegen urn:lsid:perlegen.hapmap.org:Protocol:Genotyping_1.0.0:2 urn:lsid:perlegen.hapmap.org:Assay:25767.4202104:1 urn:LSID:dcc.hapmap.org:Panel:Han_Chinese:2 QC+ G 1 86 A 0 0 86
rs2738360 chrX 272966 + ncbi_b35 illumina urn:LSID:illumina.hapmap.org:Protocol:Golden_Gate_1.1.0:1 urn:LSID:illumina.hapmap.org:Assay:959248:1 urn:LSID:dcc.hapmap.org:Panel:Han_Chinese:1 QC+ G 1 90 A 0 0 90
rs2738349 chrX 278565 + ncbi_b35 perlegen urn:lsid:perlegen.hapmap.org:Protocol:Genotyping_1.0.0:2 urn:lsid:perlegen.hapmap.org:Assay:25767.4629969:1 urn:LSID:dcc.hapmap.org:Panel:Han_Chinese:2 QC+ T 1 90 C 0 0 90
一看同学你就是在做SNP研究的,这是Hapmap上下载的genotype的数据吧,我知道这个数据量还是比较大的,最好的方法还是放到数据库里,例如mysql,建个索引,一搜索就出来了,想怎么来就怎么来,,不过用perl也简单:

perl -naf -e 'print "$F[0]\n" if $F[14]>= 0.45&& $F[14] <=0.5' text1.txt >text2.txt
不能运行呀!
luoviolet ?是紫罗兰吗?我做得就是SNP!导师让我查查那些频率在0.45-0.5的(这样我们的实验将会更容易操作一些,数据不会一边倒),这对你来说可能是小菜一碟,可是把我搞得焦头烂额。我辛苦学了perl,可是只能看懂别人的代码,就是自己写不出来!搞得我自卑的很!现在总算是遇到你这个高人,遇到救星了!

看来上海这地方高人就是多,不象我们这般小打小闹!

我把你的代码编成如下程序,并在ActivePerl上运行:
#!/usr/bin/perl -naf -e';
print "$F[0]\n";
if $F[14]>= 0.45&& $F[14] <=0.5';
text1.txt >text2.txt;

运行结果提示:can't emulate -f on #! line at C:\Perl\erxr.pl line 1

我想,是不是我没装bioperl?那么完整的代码是不是这样的?下载什么版本的装上?在哪儿下?




   

还有,那个mysql
那个mysql我一点也没有接触,好不好学呀?是不是像Excel那样操作就行?

我现在就拜你为师了,请指点一二!




   

我是在ubuntu下测试没有问.
我是在ubuntu下测试没有问题的,这就是简单的脚本,何须用bioperl这把牛刀:D,ActivePerl在windows上可能是单引号的问题。试试这个:
E:\test>perl -naf -e "print $F[0],\"\n\" if $F[14]>= 0.45&& $F[14] <=0.5" text1.txt >text2.txt


mysql比excel好用多了吧,你习惯用windows(当然mysql跟什么平台没关系)的话还是用access吧,excel只能打开60k多的数据,多了就不显示了。

question? mail: luoviolet [at] gmail.com
多谢!
我再试试