To perform sum aggregation on numeric fields

Hi all,
I have following scenario to perform sum aggregation on certain columns

Node           Allocated_Space   Pool_Name   CS_Group          Utilized Space
--------      ----------------   ----------   ---------           --------------
bdw1a_lun01   300                    bdw_p0      bdwprd_pool01      200              
bdw1a_lun02   400                    bdw_p1      bdwprd_pool01      200
bdw1a_lun03   300                    bdw_p2      bdwprd_pool01      130
bdw2a_lun04   500                    bdw_p3      bdwprd_pool01      230
bdw2a_lun05   500                    bdw_p4      bdwprd_pool01      300
bdw2a_lun06   300                    bdw_p5      bdwprd_pool01      240
dss1_lun01    100                                                    30 
dss2_lun02    200                                                   120
dss3_lun03    230                                                   200

expected output

Node           Allocated_Space   Pool_Name   CS_Group          Utilized Space
--------      ----------------   ----------   ---------           --------------
bdw1a_lun01   300                    bdw_p0      bdwprd_pool01      200              
bdw1a_lun02   400                    bdw_p1      bdwprd_pool01      200
bdw1a_lun03   300                    bdw_p2      bdwprd_pool01      130
bdw2a_lun04   500                    bdw_p3      bdwprd_pool01      230
bdw2a_lun05   500                    bdw_p4      bdwprd_pool01      300
bdw2a_lun06   300                    bdw_p5      bdwprd_pool01      240
            ------                                                 -----
             2300                                                  1300
            --------                                               ------
dss1_lun01    100                                                    30 
dss2_lun02    200                                                   120
dss3_lun03    230                                                   200
            -------                                                -------
             530                                                    350
            -------                                                --------

As you can see not all columns has value (it could be empty string).
I would like to sum only correct column value with the certain group of number of characters before "_lun".

Thanks in advance.

Hi ckwan,

One way with perl. Format output to your needs:

$ cat infile
Node           Allocated_Space   Pool_Name   CS_Group          Utilized Space
--------      ----------------   ----------   ---------           --------------
bdw1a_lun01   300                    bdw_p0      bdwprd_pool01      200              
bdw1a_lun02   400                    bdw_p1      bdwprd_pool01      200
bdw1a_lun03   300                    bdw_p2      bdwprd_pool01      130
bdw2a_lun04   500                    bdw_p3      bdwprd_pool01      230
bdw2a_lun05   500                    bdw_p4      bdwprd_pool01      300
bdw2a_lun06   300                    bdw_p5      bdwprd_pool01      240
dss1_lun01    100                                                    30 
dss2_lun02    200                                                   120
dss3_lun03    230                                                   200
$ cat script.pl
use warnings;
use strict;

my ($last_node, $tot_alloc, $tot_used) = (undef, 0, 0);

while ( <> ) {

        if ( $. < 3 ) {
                print;
                next;
        }

        chomp;

        my ($node, $alloc, $used) = (split)[0,1,-1];

        if ( ! defined $last_node ) {
                $last_node = substr $node, 0, 3;
        }

        if ( eof ) {
                printf qq[%s\n], $_;
                $tot_alloc += $alloc;
                $tot_used  += $used;
                printf qq[\t\t-------\t\t\t\t-------\n];
                printf qq[\t\t%d\t\t\t\t%d\n], $tot_alloc, $tot_used;
                printf qq[\t\t-------\t\t\t\t-------\n];
                next;
        }


        if ( $last_node ne substr $node, 0, 3 ) {
                printf qq[\t\t-------\t\t\t\t-------\n];
                printf qq[\t\t%d\t\t\t\t%d\n], $tot_alloc, $tot_used;
                printf qq[\t\t-------\t\t\t\t-------\n];
                $tot_alloc = $tot_used = 0;
                $last_node = substr $node, 0, 3;
        }

        $tot_alloc += $alloc;
        $tot_used  += $used;

        printf qq[%s\n], $_;
}
$ perl script.pl infile
Node           Allocated_Space   Pool_Name   CS_Group          Utilized Space
--------      ----------------   ----------   ---------           --------------
bdw1a_lun01   300                    bdw_p0      bdwprd_pool01      200              
bdw1a_lun02   400                    bdw_p1      bdwprd_pool01      200
bdw1a_lun03   300                    bdw_p2      bdwprd_pool01      130
bdw2a_lun04   500                    bdw_p3      bdwprd_pool01      230
bdw2a_lun05   500                    bdw_p4      bdwprd_pool01      300
bdw2a_lun06   300                    bdw_p5      bdwprd_pool01      240
                -------                         -------
                2300                            1300
                -------                         -------
dss1_lun01    100                                                    30 
dss2_lun02    200                                                   120
dss3_lun03    230                                                   200
                -------                         -------
                530                             350
                -------                         -------

Thanks for sharing birei.