Small tweaks to the example code I posted earlier accommodates the "real" file format:
use strict;
use warnings;
my $fileStr = <<STR;
Property job 1 : Activity coefficients ln(gamma) ;
Settings job 1 : T= 298.15 K ; x(6)= 1.0000 ;
Units job 1 : Concentrations x : mole fraction ;
Nr Compound ln(gamma)
1 F002 4.66656083
2 F011 26.13597035
3 F101 32.47411476
4 F11-1 29.58963453
5 F111 30.24092207
6 h2o 0.00000000
7 acetonitrile 2.14102090
8 chlorobenzene 8.72282917
9 chcl3 6.98143674
10 cyclohexane 10.20251798
11 1,2-dichloroethane 6.32324557
12 ch2cl2 5.50767091
13 1,2-dimethoxyethane 2.56706253
14 n,n-dimethylacetamide -1.64673734
Property job 2 : Activity coefficients ln(gamma) ;
Settings job 2 : T= 298.15 K ; x(7)= 1.0000 ;
Units job 2 : Concentrations x : mole fraction ;
Nr Compound ln(gamma)
1 F002 1.69945785
2 F011 0.74578421
3 F101 2.67268035
4 F11-1 1.64808218
5 F111 1.95840198
6 h2o 2.08530828
7 acetonitrile 0.00000000
8 chlorobenzene 1.08379112
9 chcl3 0.46576330
10 cyclohexane 3.71606919
11 1,2-dichloroethane -0.02354847
12 ch2cl2 -0.23798262
13 1,2-dimethoxyethane 1.22044280
14 n,n-dimethylacetamide 0.44524110
STR
open my $fIn, '<', \$fileStr or die "Couldn't open \$fileStr: $!\n";
# Look for the empty line between records
local $/ = "Nr Compound";
while (defined (my $record = <$fIn>)) {
my @lines = grep {/^\s*\d+\s+\S+\s+-?\d+\.\d+/} split "\n", $recor
+d;
next if !@lines;
my %recordData = map{/\d+\s+(\S+)\s+(\S+)/; ($1, $2)} @lines;
my @solvents = grep {!/^F\d+/} keys %recordData;
my @fractions = grep {/^F\d+/} keys %recordData;
my ($zeroSolvent) = grep {0.0 == $recordData{$_}} @solvents;
print "${zeroSolvent}_$_ => $recordData{$_}\n" for @fractions;
}
Prints:
h2o_F101 => 32.47411476
h2o_F011 => 26.13597035
h2o_F002 => 4.66656083
h2o_F11-1 => 29.58963453
h2o_F111 => 30.24092207
acetonitrile_F111 => 1.95840198
acetonitrile_F101 => 2.67268035
acetonitrile_F11-1 => 1.64808218
acetonitrile_F002 => 1.69945785
acetonitrile_F011 => 0.74578421
The key differences are choosing a different string to recognize records and only keeping interesting lines for processing from each record.
Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond