#!/usr/bin/perl
use warnings;
use strict;
my %hash;
while(defined(my $line = <>)){
if($line =~ /A:([0-9]+) +B:([0-9]+) +C:([0-9]+) +D:([0-9]+) +CNT:([0
+-9]+) +STR:([0-9]+) +END:([0-9]+)/){
my($a,$b,$c,$d,$cnt,$str,$end) = ($1,$2,$3,$4,$5,$6,$7);
my $key = "a:$a,d:$d";
if(exists $hash{$key}){
# B and C will be reported if multiple
my $current = $hash{$key};
if($current->{b} ne $b){
$current->{b} = 'MULTIPLE';
}
if($current->{c} ne $c){
$current->{c} = 'MULTIPLE';
}
# STR is start, we need the least
if($str < $current->{str}){
$current->{str} = $str;
}
# END is end, we need the greatest
if($end > $current->{end}){
$current->{end} = $end;
}
# add to count
$current->{cnt} += $cnt;
}else{ # new key
$hash{$key}{b} = $b;
$hash{$key}{c} = $c;
$hash{$key}{str} = $str;
$hash{$key}{end} = $end;
$hash{$key}{cnt} = $cnt;
}
}
}
# print the results
foreach my $key (keys %hash){
$key =~ /a:(.*),d:(.*)/;
my $current = $hash{$key};
my ($a,$d) = ($1,$2);
print "A:$a ";
print "B:$current->{b} ";
print "C:$current->{c} ";
print "D:$d ";
print "CNT:$current->{cnt} ";
print "STR:$current->{str} ";
print "END:$current->{end}\n";
}
|