- 论坛徽章:
- 307
|
回复 12# ahy114
试下,
- #!/usr/bin/perl
- use strict;
- use warnings;
- sub load_data{
- local @ARGV = shift;
- my $data = shift;
- my $merge = defined $data;
- my %hCnt;
- while (<>){
- next if (/\A\D/);
- my ($group, $start, $stop, $type) = /\w+/g;
- if ($merge){
- if (exists $data->{$group}{$type}){
- $hCnt{$group,$type}++ ? push (@{$data->{$group}{$type}}, [$start, $stop]) : ($data->{$group}{$type}->[0][-1] = $stop);
- }
- next;
- }
- push (@{$data->{$group}{$type}}, [$start, $stop]);
- }
- $data;
- }
- my ($data, $grpID);
- $data = load_data (shift, $data);
- $data = load_data (shift, $data);
- while (<>){
- if (/\A>(\d)/){
- $grpID = $1;
- next;
- }
- next if (!exists $data->{$grpID});
- my $line = $_;
- foreach my $intervals (values %{$data->{$grpID}}){
- my $str = "";
- foreach (@$intervals){
- my ($start, $stop) = @$_;
- $start -= 1;
- $str .= substr ($line, $start, ($stop - $start));
- }
- print "$str\n";
- }
- }
复制代码
perl abc.pl a b c
-----------------------------------
1223abc
33aab
|
|