I am rethinking whether I need the while and foreach so I have changed it to :
open (FOO, ">$scratches") || die "could not open file:$!";
open (D, "$logf") || die "could not open file:$!";
while (<D>) {
## look for 9840S and ebexpire
## declare OFS = tab
## tell split to split on IRS 0, 1 & 5. Very similar t
+o awk print $
if (($_ =~ /9840S/) && ($_ =~ /ebexpire, ebexpire/ ))
+{
local $, = "\t";
print F00 +(split)[0,1,5], $/;
print FOO (sort { $a <=> $b } $_ );
} # end if
} # end while
close (FOO);
close (D);
I am probably making this too hard, but I want to numerically sort the 3rd field. How do I combine the print FOO statements so that I am still spliting fields 0,1,5 while sorting on field 5?
thank you, | [reply] [d/l] |
#open your files as before, then
print FOO map { $_->[1] }
sort { $a->[0] <=> $b->[0] }
map {my @F=split; [substr($F[2],1), $_]}
<D>;
#close your files as before
Reading from bottom to top, we construct an array of arrays, where the first element of each element is the sort-field, and the second is the print-field. Then we sort by comparing the sort fields, then we return only the print-fields to print.
Updated to work on the data provided.
Caution: Contents may have been coded under pressure.
| [reply] [d/l] |