The following solution is based on the version by mr_ron. The @keys array is for preserving key order. This is being posted mainly for demonstrating a version that is light on memory consumption.
#!/usr/bin/perl -an use strict; use warnings; # usage: perl -an script.pl file.a file.b our ( $db, @keys ); my $key = join "\t", @F[0 .. 3]; push @keys, $key unless exists $db->{ $key }; $db->{ $key }[0]++; $db->{ $key }[1] += $F[4]; $db->{ $key }[2] += $F[5]; END { my ( $key, $aref, $cnt ); while ( @keys ) { $key = shift @keys; $aref = delete $db->{ $key }; ( ( $cnt = $aref->[0] ) > 1 ) ? print $key."\t".( $aref->[1] / $cnt )."\t".$aref->[2]."\n" : print $key."\t".( $aref->[1] )."\t".$aref->[2]."\n"; } }
In reply to Re: Merging partially duplicate lines
by marioroy
in thread Merging partially duplicate lines
by K_Edw
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |