Chinaunix

标题: 求perl脚本帮助,文本中关于相同内容合并 [打印本页]

作者: yang7473453    时间: 2015-09-06 18:34
标题: 求perl脚本帮助,文本中关于相同内容合并
文件一:
1###ENSMMUP00000017866###-###27582-27683
1###ENSMMUP00000017866###-###27508-27576
1###ENSMMUP00000017866###-###27290-27503
1###ENSMMUP00000017866###-###24407-24477
1###ENSMMUP00000017866###-###24345-24401
1###ENSMMUP00000017866###-###24047-24340
1###ENSMMUP00000017866###-###23770-24042
1###ENSMMUP00000017866###-###23742-23765
1###ENSMMUP00000040736###-###199515-200498
1###ENSMMUP00000040736###-###198582-198818
1###ENSMMUP00000030409###+###395728-395934
1###ENSMMUP00000030409###+###403004-403148
1###ENSMMUP00000030409###+###407674-407795
1###ENSMMUP00000030409###+###408910-409030

想合并相同的,生成文件格式如下:
1###ENSMMUP00000017866###-###27582-27683  27508-27576  27290-27503  24407-24477 24345-24401 24047-24340 23770-24042  23742-23765
1###ENSMMUP00000040736###-###199515-200498  198582-198818
1###ENSMMUP00000030409###+###395728-395934  403004-403148  407674-407795  408910-409030
作者: MMMIX    时间: 2015-09-06 23:20
回复 1# yang7473453


    用正则把两部分抽取出来,然后放到个 hash 中,然后输出即可。
作者: xiaoxingan99    时间: 2015-09-07 09:41
练习一下,没有排序的
use strict;
use warnings;
my $key;
my $value;
my %h;
foreach (<DATA>)
{
        ($key,$value)=$_=~/(.{29})(.*)/;
        $h{$key}.="$value ";
        }
        foreach (keys %h)
        {
                print "$_$h{$_}\n";
                }

作者: MMMIX    时间: 2015-09-07 09:51
本帖最后由 MMMIX 于 2015-09-07 09:51 编辑

回复 3# xiaoxingan99


    foreach (<DATA>) 或者 foreach (<>) 或者 foreach (<$fh>)

这些写法不能说错,但要碰上大文件, 例如说是个两三G的文件要处理, 这种写法由于要预先把文件整个读入, 直接就能把机器拖到不可用.

正确的写法应该是 while (<>)
作者: xiaoxingan99    时间: 2015-09-07 09:53
回复 4# MMMIX


    谢谢指教^_^
作者: yang7473453    时间: 2015-09-07 23:32
非常感谢,不过可以解释一下这个~/(.{29})(.*)/是什么意思,尤其是29这个不太懂
回复 3# xiaoxingan99


   
作者: xiaoxingan99    时间: 2015-09-08 09:05
回复 6# yang7473453

这段是匹配,.是元字符,这里表示除了回车外的所有单字符,{29}表示匹配29次
我是按照你给的数据, 数出来后面应该是第29位开始是要处理的数据
这个匹配是最简单的,你看一下平perl语言入门第七章就知道了
作者: yang7473453    时间: 2015-09-08 11:05
非常感谢!!!回复 7# xiaoxingan99


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2