After some search, I found elegant solution from Aaron, but still not able to meet my requirement.
#!/usr/bin/env perl
use strict; use warnings;
my $key = shift;
my @cols = @ARGV;
my %h;
die "Usage: grp.pl id_column field1 [field2]...\n" unless @cols;
# $ARGV[0] is the Base column
# $ARGV[1..x] is the list of columns to add up
while(<DATA>){
chomp;
my @f = split;
for (@cols){
$h{$f[$key]}{$_}{t} += $f[$_];
$h{$f[$key]}{$_}{n}++;
}
}
for my $k (sort keys %h){
print $k;
print "\t$h{$k}{$_}{n}\t$h{$k}{$_}{t}" for @cols;
print "\n";
}
__DATA__
server01: 2015-06-01T12:40:03-04:00 DB101 10 MB/sec
server01: 2015-06-01T12:40:03-04:00 DB202 5 MB/sec
server01: 2015-06-01T12:40:03-04:00 ASM 2 MB/sec
server01: 2015-06-01T12:40:03-04:00 MYDB101 2 MB/sec
server01: 2015-06-01T12:40:03-04:00 MYDB202 5 MB/sec
server01: 2015-06-01T12:40:03-04:00 _OTHER_DB_ 30 MB/sec
server01: 2015-06-01T12:41:03-04:00 DB101 3 MB/sec
server01: 2015-06-01T12:41:03-04:00 DB202 4 MB/sec
server01: 2015-06-01T12:41:03-04:00 ASM 2 MB/sec
server01: 2015-06-01T12:41:03-04:00 MYDB101 9 MB/sec
server01: 2015-06-01T12:41:03-04:00 MYDB202 7 MB/sec
server01: 2015-06-01T12:41:03-04:00 _OTHER_DB_ 50 MB/sec
server02: 2015-06-01T12:40:03-04:00 DB101 90 MB/sec
server02: 2015-06-01T12:40:03-04:00 DB202 9 MB/sec
server02: 2015-06-01T12:40:03-04:00 ASM 2 MB/sec
server02: 2015-06-01T12:40:03-04:00 MYDB101 3 MB/sec
server02: 2015-06-01T12:40:03-04:00 MYDB202 1 MB/sec
server02: 2015-06-01T12:40:03-04:00 _OTHER_DB_ 90 MB/sec
server02: 2015-06-01T12:41:03-04:00 DB101 1 MB/sec
server02: 2015-06-01T12:41:03-04:00 DB202 4 MB/sec
server02: 2015-06-01T12:41:03-04:00 ASM 2 MB/sec
server02: 2015-06-01T12:41:03-04:00 MYDB101 7 MB/sec
server02: 2015-06-01T12:41:03-04:00 MYDB202 7 MB/sec
server02: 2015-06-01T12:41:03-04:00 _OTHER_DB_ 55 MB/sec
Got below result:
./grp.pl 2 3
ASM 4 8
DB101 4 104
DB202 4 22
MYDB101 4 21
MYDB202 4 20
_OTHER_DB_ 4 225
Could you please help in finding a way to group on time column based on Hour and print as per my requirement.
Sample of Required output:
Frequency Minute:
collectionTime DB101 DB202 ASM MYDB101 MYDB202 _OTHER_DB_
2015-06-01T12:40:03-04:00 100 14 4 5 6 140
2015-06-01T12:41:03-04:00 4 8 4 16 14 105
Frequency Hour:
collectionTime DB101 DB202 ASM MYDB101 MYDB202 _OTHER_DB_
2015-06-01T12:00:00-04:00
2015-06-01T13:00:00-04:00