忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 461 | 回复: 4

文件匹配与统计 [复制链接]

论坛徽章:
0
发表于 2017-11-15 11:26 |显示全部楼层
本帖最后由 iamline 于 2017-11-15 11:34 编辑

本人有大概6000+文件需要统计,每每不得果,想寻求帮助

这6000+文件以list的形式给出,例子如下:
more list
  1. E350        /path/E350.bsn.tab.filt
  2. E371        /path/E371.bsn.tab.filt
  3. E384        /path/E384.bsn.tab.filt
  4. ……
复制代码
$0是样本名,$1是对应的统计文件,大概有6000+行。


这个$1统计文件是序列的比对结果文件,格式大概是:
more blastn.txt
  1. chu        288        1        288        T32-Genome        5099311        4870810        4870523        0.98        --        0        288        506        1e-144        --        --
  2. yja        211        1        211        T32-Genome        5099311        357009        357219        0.99        --        0        211        372        1e-104        --        --
  3. Tsp        153        1        153        T32-Genome        5099311        213981        214133        0.98        --        0        153        262        5e-71        --        --
  4. arp        400        1        389        T32-Genome        5099311        363499        363887        0.93        --        0        389        585        1e-167        --         --
  5. trp        220        1        220        T32-Genome        5099311        1999800        1999581        0.94        --        0        220        343        3e-95        --        --
复制代码



我想达到的目的是:
我给一个判断文件,如:
more gene.txt
  1. chu
  2. yja
  3. Tsp
复制代码
如果上面list的6000+个文件($1,格式如blastn.txt),第一列的name id与我给的判断文件(gene.txt)中的name id的种类一样,有重复没关系,但是不能多,就输出对应的样本名


本人初学者,大概写了一个,但是在条件判断上处理不对,很希望得到帮助,非常感谢啊~
  1. die "\nusage: perl $0 <blast.list> <gene list> \n\n" unless @ARGV == 2;
  2.         
  3. my $file = shift;
  4. my $gene = shift;
  5.       
  6. my %namelist;
  7. my @all;
  8.         
  9. open (GM, "<$gene") or die;
  10. while(<GM>) {
  11.         chomp($_);
  12.         next if (/^\s*$|^#+/);
  13.         my @list = split /\s+/, $_;
  14.         my ($name, $ident) = ($list[0], $list[1]);
  15.         $namelist{$name} = 0;
  16. }      
  17. close(GM);
  18.       
  19.         #print STDERR "$.\n";
  20.         while(my $line=<IN>){
  21.                 chomp $line;
  22.                 next if ($line=~/^Query_id/);
  23.                 my @b=split /\s+/,$line;
  24.                 if(exists $namelist{$b[0]}){
  25.                         #$namelist{$b[0]}++;
  26.                         $index++;
  27.                 }
  28.         }
  29.       
  30.                 #if($namelist{$b[0]}>=1){
  31.                 #       $index++;
  32.                 #}
  33.       
  34.         if($index==keys %namelist){
  35.                 push @all, $a[0];
  36.         }
  37. }
  38. close(LIST);

  39. my $all=join "\n",@all;     
  40. print "$all\n";
复制代码







论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2017-11-15 14:19 |显示全部楼层
你的表述我怎么还没看懂啊?

论坛徽章:
0
发表于 2017-11-15 15:23 |显示全部楼层
回复 2# sohusina

表述是有点多啊~
其实就是搜索比对结果文件,只出现我指定的gene,就输出样本名;如果还出现其他基因,就舍弃


论坛徽章:
31
荣誉会员
日期:2011-11-23 16:44:17丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17天蝎座
日期:2014-08-21 17:18:48丑牛
日期:2014-08-29 16:06:45天秤座
日期:2014-08-29 10:12:18天秤座
日期:2014-08-26 16:18:20双子座
日期:2014-07-30 11:38:27寅虎
日期:2014-08-04 10:24:12IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:00
发表于 2017-11-16 18:02 |显示全部楼层
回复 3# iamline

我也没看明白.

能不能举个栗子 ?

论坛徽章:
0
发表于 2017-11-16 18:41 |显示全部楼层
我也没看明白.

举个栗子 ?
  • name id的种类一样?
  • 有重复, 没关系?
  • 不能多?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP