in reply to Re^4: Combining matching lines in a TAB seperated textfile
in thread Combining matching lines in a TAB seperated textfile

I'm very close to the solution!
(But it takes a lot of time...)

It is about the last three lines.
With line one and two I'll get the right values. Adding or averaging (/2) results in "0.0".
sprintf tricks doesn't seem to work.
Summary:
How can I add or average two indexed values?
(I'm new to hashes/arrays etc.)

my @col1; # '1st-line-of-pair' buffer
foreach (@unpaired) { # comment
open(DATA, $_) or die "Couldn't open $_ for reading: $!\n"; # Open file
chomp($_ = <DATA>); # input regel 1 and remove newline, skip headers
while (<DATA>) { # read line
chomp;
my @col2 = split /\t/; # split line on tabs
if (@col1) { # two lines read, i.e. pair available?
if ( $col1[$h{'A'}[0]] eq $col2[$h{'A'}[0]] # match on ID_1
&& $col1[$h{'O'}[0]] eq $col2[$h{'O'}[0]] # match on plan ID
&& $col1[$h{'Q'}[0]] eq $col2[$h{'Q'}[0]] # match on session date
&& $col1[$h{'R'}[0]] eq $col2[$h{'R'}[0]] # match on session time
) {
$col1[$h{'B'}[0]] .= "-".$col2[$h{'B'}[0]]; # Concatenate B for both lines: <val1>-<val2>
$col1[$h{'D'}[0]] = "Paired_Perl"; # This set is modified by Perl
$col1[$h{'Y'}[0]] = ($col1[$h{'Y'}[0]]); # correct value
$col2[$h{'Y'}[0]] = ($col2[$h{'Y'}[0]]); # correct value
$col1[$h{'Y'}[0]] = ($col1[$h{'Y'}[0]] + $col2[$h{'Y'}[0]]); # adding goes wrong "0.0" ....
Thanks again!
  • Comment on Re^5: Combining matching lines in a TAB seperated textfile