in reply to Merging partially duplicate lines
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"; } }
|
|---|