免费注册 查看新帖 |

Chinaunix

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

两个文件合并问题求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-11 16:11 |只看该作者 |倒序浏览
大家好,我现在有这样两个文件
文件A _>AGL000001  locus=Scaffold1:332:538:+
          ATGCAATCACGGACTGGCGTTTCAGCTTCAACTTGGAACACGATCATCAC
          _>AGL000002  locus=Scaffold1:660:842:+
          ATGCGCCACGAAACCAAATTAGTCATCACACTATGGGGTGGCATGTTAGG
          _>AGL000003  locus=Scaffold1:1026:1379:+
          ATGTTGTTTCAGGCCAGCCAGTCAACATTGGGTGTAGGTAGAGCTGCAGT
          CTTCACTAGTATCCTCTTCAGTTTGACCCATCTAATCAATCTTGGTCACC
文件B AGL000001        100.00        2e-42        gi|513804519|ref|WP_016511416.1|        Extracellular transglycosylase, partial [Lactobacillus plantarum]
          AGL000002        100.00        9e-74        gi|448820020|ref|YP_007413182.1|        Membrane-bound protease, CAAX family [Lactobacillus plantarum]
          AGL000004        100.00        5e-178        gi|254555435|ref|YP_003061852.1|        membrane-bound protease, CAAX family [Lactobacillus plantarum WCFS1]
现在需要根据A和B的第一列合并输出,最终得到的文件为这个样子

          _>AGL000001  locus=Scaffold1:332:538:+ Extracellular transglycosylase, partial [Lactobacillus plantarum]
          ATGCAATCACGGACTGGCGTTTCAGCTTCAACTTGGAACACGATCATCAC
          _>AGL000002  locus=Scaffold1:660:842:+ Membrane-bound protease, CAAX family [Lactobacillus plantarum]
          ATGCGCCACGAAACCAAATTAGTCATCACACTATGGGGTGGCATGTTAGG
          _>AGL000003  locus=Scaffold1:1026:1379:+ membrane-bound protease, CAAX family [Lactobacillus plantarum WCFS1]
          ATGTTGTTTCAGGCCAGCCAGTCAACATTGGGTGTAGGTAGAGCTGCAGT
          CTTCACTAGTATCCTCTTCAGTTTGACCCATCTAATCAATCTTGGTCACC
我该怎样去获得的,折磨好几天了,尝试A,B各根据第一列为key,每个单文件为value建立hash但未成功,求各位大神指点。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-07-11 17:47 |只看该作者
  1. #!/usr/bin/perl

  2. use warnings;
  3. use strict;

  4. my $fileA = "fileA";
  5. my $fileB = "fileB";

  6. my %hashA;
  7. open (FILEB, "<".$fileB) or die("$!");
  8. while (my $line = <FILEB>) {
  9.     chomp $line;
  10.     my @row = split(/\s+/, $line, 5);
  11.     $hashA{$row[0]} = $row[4];
  12. }
  13. close(FILEB);

  14. open (FILEA, "<".$fileA) or die("$!");
  15. while (my $line = <FILEA>) {
  16.     my $line_match = 1;
  17.     foreach my $key (keys %hashA) {
  18.         if ($line =~ /$key/) {
  19.             chomp $line;
  20.             print $line, " ", $hashA{$key}, "\n";
  21.             $line_match = 0;
  22.         }
  23.     }
  24.     if ($line_match) {
  25.         print $line;
  26.     }
  27. }
  28. close(FILEA);
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-07-11 19:53 |只看该作者
大神谢谢你了,可以做到的,真谢谢了回复 2# q1208c


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
4 [报告]
发表于 2014-07-14 06:44 |只看该作者
回复 3# 披星戴月无悔

不客气.

希望下次你就可以自己搞定了.
   

论坛徽章:
0
5 [报告]
发表于 2014-07-23 14:03 |只看该作者
本帖最后由 hubenxia 于 2014-07-23 14:11 编辑

#!/usr/bin/perl -w
my ($key,$value,$head);
my (@value,@key,@key1,@seq,@value1,@key2);
open IN1,"<1.txt";
$/="_>";
<IN1>;
while (<IN1>) {
        chomp;
        @value=split "\n";
        $key=shift@value;
        @key=split /\t/,$key;
        push @key1,$key[0];
        push @key2,$key[1];
                s/\n//g;
        $value=join "",@value;
        push @value1,$value;
}
open IN2,"<2.txt";
open OUT1,">out1.txt";
while (<IN2>) {
        chomp;
        my @seq=split /\t/;
        for ($i=0;$i<3;$i++) {       
        if ($seq[0] eq $key1[$i]) {
                print  OUT1 "\_>$key1[$i]\t$key2[$i]\t$seq[4]\n$value1[$i]\n";
        }
}
}
close OUT1;
close IN2;
close IN1;  这个代码很丑
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP