免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5397 | 回复: 22
打印 上一主题 下一主题

急!如何从一个文件里的名字提取另一个文件相对应的部分 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-09 17:06 |只看该作者 |倒序浏览
不好意思,各位 又来打扰了,现在比较急拉,帮我看看这个程序吧,现在我有两个文件,1.txt 和2.txtt
我的编码如下:
#!/usr/bin/perl -w
open(FILE1,"<1.txt" || die"$!";
open(FILE2,"<2.txt" || die "$!";
open(FILE_OUT,">3.txt" || die "$!";
@array =<FILE2>;
close (FILE2);
foreach $name(@array)
{
chomp($name);
$flag =0;
        while(<FILE1>
        { chomp;
                if($_=~ /^>/)
                {
                  if($_=~ /$name\|(.*)/){
                   print FILE_OUT $_,"\n";
                $flag =1;
                   }
                        else
                        {next;}
                }
                else
                {
                        if($flag ==1){
                        print FILE_OUT $_,"\n";}
                       
               
                }


        }
}
close(FILE_OUT);
close(FILE1);


我是想要用2.txt里的名字去提取文件1.txt里的序列,但是弄了好久都出错,麻烦帮我看看吧  谢谢拉 ....

[ 本帖最后由 juzi1114 于 2008-7-10 10:34 编辑 ]

存档文件 1.rar

3 KB, 下载次数: 33

论坛徽章:
0
2 [报告]
发表于 2008-07-09 17:09 |只看该作者
if (m/$name(.*)){


here

论坛徽章:
0
3 [报告]
发表于 2008-07-09 17:33 |只看该作者

回复 #2 forlorngenius 的帖子

是我不小心掉了 已经改过来了

论坛徽章:
0
4 [报告]
发表于 2008-07-10 11:55 |只看该作者
我重新修改了下,你们谁有时间帮我看下吧 55... 谢谢啦!!

论坛徽章:
0
5 [报告]
发表于 2008-07-10 12:14 |只看该作者
你举个例子,你想做什么(提取哪部分)

论坛徽章:
0
6 [报告]
发表于 2008-07-10 12:30 |只看该作者

回复 #5 cobrawgl 的帖子

从第2个文件中由每一行提取相应的部分 如由
>P30443这一行来提取另外一个文件中所对应的序列
>P30443|1A01_HUMAN HLA class I histocompatibility antigen, A-1 alpha chain precursor - Homo sapiens (Human)
MAVMAPRTLLLLLSGALALTQTWAGSHSMRYFFTSVSRPGRGEPRFIAVGYVDDTQFVRF
DSDAASQKMEPRAPWIEQEGPEYWDQETRNMKAHSQTDRANLGTLRGYYNQSEDGSHTIQ
IMYGCDVGPDGRFLRGYRQDAYDGKDYIALNEDLRSWTAADMAAQITKRKWEAVHAAEQR
RVYLEGRCVDGLRRYLENGKETLQRTDPPKTHMTHHPISDHEATLRCWALGFYPAEITLT
WQRDGEDQTQDTELVETRPAGDGTFQKWAAVVVPSGEEQRYTCHVQHEGLPKPLTLRWEL
SSQPTIPIVGIIAGLVLLGAVITGAVVAAVMWRRKSSDRKGGSYTQAASSDSAQGSDVSL
TACKV

论坛徽章:
0
7 [报告]
发表于 2008-07-10 12:51 |只看该作者
#!/usr/bin/perl

use strict;
use warnings;

my $file1 = '1.txt';
my $file2 = '2.txt';


open FILE_1, $file1
    or die;

open FILE_2, $file2
    or die;

my @data = <FILE_1>;
my $data = join '', @data;

while (<FILE_2>) {
        print;
        chomp;
    print $1 if $data =~ /($_.*?)>/ms;
}


__________________________

先给你个能用的,版主有个更好的解决办法,可惜我还没学会

论坛徽章:
0
8 [报告]
发表于 2008-07-10 13:20 |只看该作者

回复 #7 cobrawgl 的帖子

呵呵 非常感谢了啊 真的是感激涕零啊 哈哈.... 我从昨天弄到现在 就这一个快把我弄晕了 原来这样看起来的话不是很难 就是我想的逻辑太复杂了,谢谢  好崇拜你们啦 呵呵.... 多向你们学习了!!!

论坛徽章:
0
9 [报告]
发表于 2008-07-10 13:32 |只看该作者

回复 #7 cobrawgl 的帖子

呵呵 有个地方不是很懂啦 就是my $data = join '', @data; 这一句是把整个文件都变为一行了吗? 那后面出来的结果怎么按照以前的格式来分行的???

论坛徽章:
0
10 [报告]
发表于 2008-07-10 13:33 |只看该作者
原帖由 juzi1114 于 2008-7-10 13:20 发表
呵呵 非常感谢了啊 真的是感激涕零啊 哈哈.... 我从昨天弄到现在 就这一个快把我弄晕了 原来这样看起来的话不是很难 就是我想的逻辑太复杂了,谢谢  好崇拜你们啦 呵呵.... 多向你们学习了!!!



花点时间把programming perl的正则表达那章好好看看就能解决了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP