in reply to Text Manipulation

I'd do something like this:

#!/usr/bin/perl -w use strict; my %data; my @missing; while (<DATA>) { chomp; my @line = split /,/; if ($line[1] eq '--') { # first half $data{$line[4]} = \@line; } else { # second half if (exists $data{$line[1]}) { print join ',', @{$data{$line[1]}}[4,5], @line[1,2]; print "\n"; delete $data{$line[1]}; } else { push @missing, \@line; } } } foreach (sort keys %data) { print join ',', @{$data{$_}}[4,5,0,1]; print "\n"; } foreach (@missing) { print join ',', @{$_}[3,4,1,2]; print "\n"; } __END__ --,--,--,--,1.280000e+2,9.930000e+0 --,--,--,--,1.920000e+2,9.950000e+0 --,--,--,--,2.560000e+2,1.013000e+1 --,--,--,--,2.000000e+0,4.370000e+0 --,--,--,--,4.000000e+0,5.300000e+0 --,--,--,--,8.000000e+0,6.590000e+0 --,--,--,--,1.600000e+1,7.830000e+0 --,--,--,--,2.400000e+1,8.710000e+0 --,--,--,--,3.200000e+1,9.160000e+0 --,--,--,--,6.400000e+1,9.510000e+0 --,2.000000e+0,6.500000e+0,--,--,-- --,2.000000e+0,6.450000e+0,--,--,-- --,4.000000e+0,6.650000e+0,--,--,-- --,4.000000e+0,6.570000e+0,--,--,-- --,8.000000e+0,6.550000e+0,--,--,-- --,8.000000e+0,6.600000e+0,--,--,-- --,1.600000e+1,6.570000e+0,--,--,-- --,1.600000e+1,6.570000e+0,--,--,-- --,2.400000e+1,6.650000e+0,--,--,-- --,2.400000e+1,6.680000e+0,--,--,-- --,2.400000e+1,6.640000e+0,--,--,-- --,3.200000e+1,6.720000e+0,--,--,--

Which seems to give the output you wanted.

--
<http://www.dave.org.uk>

"The first rule of Perl club is you do not talk about Perl club."
-- Chip Salzenberg