in reply to Multiple Sort on a file

You'll want to read the entire file into an array of arrays, and then use perl's nice sort function to sort that array, finally writing the data back to the file. Sample code is below:
my @data while (my $line = <FILE>) { my @elements = split /,/, $line; push @data, \@elements; # need to store as ref } @data = sort { $$a[2] cmp $$b[2] or $$a[0] <=> $$b[0] } @data; # cmp and <=> are string and numerical comparison operators, # respectively; if the left hand arg is less than the right, # they return -1, if equal, 0, and otherwise 1, so if the # 3rd column of the array is the same, we get a 0, which # triggers the 'or' and the second comparison open OUTFILE, ">$outfile" or die $!; foreach my $item (@data) { print OUTFILE join ',', @$item; print OUTFILE "\n"; }

-----------------------------------------------------
Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain

Replies are listed 'Best First'.
Re: Re: Multiple Sort on a file
by Anonymous Monk on Aug 16, 2001 at 11:01 UTC
    Thanks monks !!!
    I have been enlightened !!
    I was trying the cmp and <=> separately. I didn't think you could combine them .. The explanation for the 'or' was a great help .. Thanks again ..
    Someday, I hope to be answering queries here .. Bless me so I get there .. ;-)