免费注册 查看新帖 |

Chinaunix

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

用perl实现匹配多行的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-23 21:57 |只看该作者 |倒序浏览
文件部分如下:
## Alignment 0: score=252.0 e_value=5e-08 N=6 chr1&chr7 minus
  0-  0:        vv1g01013787001        vv7g01028210001          3e-56
  0-  1:        vv1g01013782001        vv7g01028199001          3e-64
  0-  2:        vv1g01013772001        vv7g01028189001         5e-101
  0-  3:        vv1g01013765001        vv7g01028179001         4e-117
  0-  4:        vv1g01013763001        vv7g01028174001         5e-136
  0-  5:        vv1g01013735001        vv7g01028171001          1e-36
## Alignment 1: score=272.0 e_value=4.8e-06 N=6 chr10&chr12 plus
  1-  0:        vv10g01004803001        vv12g01030482001          6e-06
  1-  1:        vv10g01004809001        vv12g01030487001         2e-146
  1-  2:        vv10g01004811001        vv12g01030488001         2e-156
  1-  3:        vv10g01004812001        vv12g01030489001         1e-143
  1-  4:        vv10g01004820001        vv12g01030491001              0
  1-  5:        vv10g01012628001        vv12g01030508001          9e-38
## 。。。。。。。。。。。
然后我想匹配所有##行含有chr1&chr7的行和对应的下面几行,我写的代码如下:
use strict;
open IN,"<$ARGV[0]" or die $!;
open OUT,">$ARGV[1]" or die $!;

$/="##";
while(<IN>){         
           if(/(.*)chr10&chr12(.*)(\d+)$/){
               print OUT"$_\n";
               
}
}
没有任何输出,我知道匹配错了,望大神指教,不知道$/="##"这个用的对不对

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2015-09-23 22:42 |只看该作者
nanshanjin 发表于 2015-09-23 21:57
然后我想匹配所有##行含有chr1&chr7的行和对应的下面几行,我写的代码如下:
...
           if(/(.*)chr10&chr12(.*)(\d+)$/){


你倒是给自己解释下,这两个怎么能对上?

论坛徽章:
0
3 [报告]
发表于 2015-09-23 22:56 |只看该作者
嘿嘿,求解释回复 2# MMMIX


   

论坛徽章:
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-09-07 12:26 |只看该作者
  1. perl -ane 'if($F[0] eq "##"){$P=$F[6] eq "chr1&chr7"}print if($P)' f
复制代码

## Alignment 0: score=252.0 e_value=5e-08 N=6 chr1&chr7 minus
  0-  0:        vv1g01013787001        vv7g01028210001          3e-56
  0-  1:        vv1g01013782001        vv7g01028199001          3e-64
  0-  2:        vv1g01013772001        vv7g01028189001         5e-101
  0-  3:        vv1g01013765001        vv7g01028179001         4e-117
  0-  4:        vv1g01013763001        vv7g01028174001         5e-136
  0-  5:        vv1g01013735001        vv7g01028171001          1e-36

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
5 [报告]
发表于 2016-09-07 14:30 |只看该作者
  1. use 5.020;
  2. use File::Slurp qw(read_file);

  3. my $text = read_file("sample.txt");
  4. my @lines = split('##', $text);
  5. say grep(/chr1&chr7/, @lines);

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP