免费注册 查看新帖 |

Chinaunix

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

求助文件处理的问题,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-07 17:25 |只看该作者 |倒序浏览
我这里有一个文件,有三列数据,如下
chr gene1 gene2
chr1 genea   .
chr1 geneb   .
chr1 genec   gene
...    ...         .
chr2 ...        gene
...    ...         .
第一列是染色体,第二列是全部的基因,...是省略号,第三列相对于第二列有基因对应,在该位置就有一个基因,没有的话就有一个".",现在第三列两个基因之间的"."的数量大于50个的话就舍去,小于50则保留,然后输出保留后的三列数据,求大神解答

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-04-07 17:33 |只看该作者
现在第三列两个基因之间的"."的数量大于50个的话就舍去,小于50则保留,然后输出保留后的三列数据

没看太懂, 能否说的详细些. 我对基因没啥概念. 贴出个最后的结果瞧瞧, 谢谢.

论坛徽章:
0
3 [报告]
发表于 2016-04-07 17:39 |只看该作者
其实就是第三列两个基因间“.”的数量大于50的话,就删除,然后输出回复 2# sunzhiguolu


   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2016-04-07 17:55 |只看该作者
回复 3# nanshanjin
如何计算呢, 是连续的 . , 还是第一次第三列是 . 到最后一行第三列为 . 的之间的数量大于 50 才舍去. 不好意思, 理解能力有点弱.

   

论坛徽章:
0
5 [报告]
发表于 2016-04-07 18:00 |只看该作者
可能我说的不清楚吧,是第三列两个基因之间的“.”的数量,是连续的类似于
.
.
gene1
.
.
.
.
gene2
gene3
.
gene4
然后如果“.”数量大于4的去掉,那么结果就是
.
.
gene1
gene2
gene3
.
gene4
当然第一列和第二列也一起输出吧。
回复 4# sunzhiguolu


   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2016-04-07 18:23 |只看该作者
本帖最后由 sunzhiguolu 于 2016-04-07 18:24 编辑

回复 5# nanshanjin
你试下, 我随便填了一些数据.
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my ($sLimit, @aBin) = (4);
  5. while (<DATA>){
  6.         if (/\.$/){
  7.                 push (@aBin, $_);
  8.         }else{
  9.                 if (@aBin and @aBin < $sLimit){
  10.                         print for @aBin;
  11.                 }
  12.                 print;
  13.                 undef (@aBin);
  14.         }
  15. }
  16. __DATA__
  17. chr gene1 gene2
  18. chr1 genea   .
  19. chr1 geneb   .
  20. chr1 genec   gene
  21. chr2 geneb         .
  22. chr2 genea       .
  23. chr2 geneb         .
  24. chr2 genea       .
  25. chr2 geneb         .
  26. chr2 genea       .
  27. chr3 genac        gen3
复制代码

论坛徽章:
0
7 [报告]
发表于 2016-04-07 18:41 |只看该作者
谢谢,试试看回复 6# sunzhiguolu


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2016-04-08 08:37 |只看该作者
回复 6# sunzhiguolu

modify ...

while(<DATA>){
  if(/[.]\s*$/){
    push @aBin, $_;
    next;          # using "next" & without "else" block
  }
  if(1 <= @aBin and @aBin < $sLimit){
    print @aBin;   # without for function
  }
  print;
  @aBin = ();
}

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
9 [报告]
发表于 2016-04-08 10:13 |只看该作者
回复 8# jason680
大神您好, 您说使用 next, 在这个问题中 next 与 if else 相比有什么优势吗. 还请指点, 谢谢.

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2016-04-08 10:23 |只看该作者
回复 9# sunzhiguolu

>> ... next 与 if else 相比有什么优势吗.
   
相比....你比了吗?

怎会不知道差异与优势....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP