in reply to File sort and values in file name
I need to find all the files with the same "string"
Group by "string" ⇒ use a hash.
use List::Util qw( min ); my %grouped_maxes; while (<DATA>) { chomp; my ($hash, $amount, $end) = split /_/; push @{ $grouped_maxes{$hash} }, $amount if defined($end) && $end eq 'max'; } for my $hash (keys %grouped_maxes) { print("$hash: ", min( @{ $grouped_maxes{$hash} } ), "\n"); } __DATA__ 111aaa222ccc324567fed54333221235_1.04 111aaa222ccc324567fed54333221235_1.05_max 111aaa222ccc324567fed54333221235_0.98_min 111aaa222ccc324567fed54333221235_1.02_max 111aaa222ccc324567fed54333221235_0.21 777aaa222ccc324567fed54333221235_1.04 777aaa222ccc324567fed54333221235_1.07_min 777aaa222ccc324567fed54333221235_1.04_max 888aaa222ccc324567fed54333221235_0.21
Additionally I also need to know if there is no _max file at all in the selected files
Keep track of all the unique hash strings you see, keep track of the unique hash strings you see with a max, then remove those with a max from the whole set.
Remove duplicates ⇒ use a hash.
use List::Util qw( min ); my %hashes; my %grouped_maxes; while (<DATA>) { chomp; my ($hash, $amount, $end) = split /_/; ++$hashes{$hash}; push @{ $grouped_maxes{$hash} }, $amount if defined($end) && $end eq 'max'; } for my $hash (keys %hashes) { if (exists($grouped_maxes{$hash})) { my $min_max = min( @{ $grouped_maxes{$hash} } ); print("$hash: $min_max\n"); } else { print("$hash: No max\n"); } } __DATA__ 111aaa222ccc324567fed54333221235_1.04 111aaa222ccc324567fed54333221235_1.05_max 111aaa222ccc324567fed54333221235_0.98_min 111aaa222ccc324567fed54333221235_1.02_max 111aaa222ccc324567fed54333221235_0.21 777aaa222ccc324567fed54333221235_1.04 777aaa222ccc324567fed54333221235_1.07_min 777aaa222ccc324567fed54333221235_1.04_max 888aaa222ccc324567fed54333221235_0.21
777aaa222ccc324567fed54333221235: 1.04 888aaa222ccc324567fed54333221235: No max 111aaa222ccc324567fed54333221235: 1.02
|
|---|