REVIEW_DATE,AUTHOR,ISBN,DISCOUNTED_PRICE
1985/01/21,"Douglas Adams",0345391802,5.95
1990/01/12,"Douglas Hofstadter",0465026567,9.95
1998/07/15,"Timothy ""The Parser"" Campbell",0968411304,18.99
1999/12/03,"Richard Friedman",0060630353,5.95
2001/09/19,"Karen Armstrong",0345384563,9.95
2002/06/23,"David Jones",0198504691,9.95
2002/06/23,"Julian Jaynes",0618057072,12.50
2003/09/30,"Scott Adams",0740721909,4.95
2004/10/04,"Benjamin Radcliff",0804818088,4.95
2004/10/04,"Randel Helms",0879755725,4.50
####
use strict;
use warnings;
use Text::CSV;
my ( $csvFileName, @csvLines ) = 'FileName.csv';
my $csv = Text::CSV_XS->new( { binary => 1, auto_diag => 2 } )
or die "Cannot use CSV: " . Text::CSV->error_diag();
open my $csvfh, '<', $csvFileName or die $!;
# Get first line (array reference to parsed column names)
my $columnNames = $csv->getline($csvfh);
# $row contains an array reference to the parsed csv line
while ( my $row = $csv->getline($csvfh) ) {
push @csvLines, $row;
}
close $csvfh;
# $a->[3] dereferences the array reference to get the third element
@csvLines = sort { $a->[3] <=> $b->[3] } @csvLines;
# Add column names array reference to beginning of array
unshift @csvLines, $columnNames;
$csv->eol("\n");
# Print the sorted csv lines to a file
open $csvfh, '>', "sorted_$csvFileName" or die $!;
$csv->print( $csvfh, $_ ) for @csvLines;
close $csvfh;
####
REVIEW_DATE,AUTHOR,ISBN,DISCOUNTED_PRICE
2004/10/04,"Randel Helms",0879755725,4.50
2003/09/30,"Scott Adams",0740721909,4.95
2004/10/04,"Benjamin Radcliff",0804818088,4.95
1985/01/21,"Douglas Adams",0345391802,5.95
1999/12/03,"Richard Friedman",0060630353,5.95
1990/01/12,"Douglas Hofstadter",0465026567,9.95
2001/09/19,"Karen Armstrong",0345384563,9.95
2002/06/23,"David Jones",0198504691,9.95
2002/06/23,"Julian Jaynes",0618057072,12.50
1998/07/15,"Timothy ""The Parser"" Campbell",0968411304,18.99
####
{ $a->[3] <=> $b->[3] }
####
{ $a->[5] <=> $b->[5] }