I'm sure I've done this in the past and there is something small I'm forgetting, but how can I sort a CSV file on a certain column? I'm interested in answers with and without 3rd party Perl modules. Mainly methods without, since I don't always have access to install additional modules.
Example data:
name,25,female name,24,male name,27,female name,21,male
desired end result after sorting on the 2nd numeric column:
name,21,male name,24,male name,25,female name,27,female
As CSV is a pretty complex format, it is better to use a module that does the work for us.
Following is an example using the Text::CSV module:
#!/usr/bin/env perl
use strict;
use warnings;
use constant AGE => 1;
use Text::CSV;
my $csv = Text::CSV->new();
my @rows;
while ( my $row_ref = $csv->getline( \*DATA ) ) {
push @rows, $row_ref;
}
@rows = sort { $a->[AGE] <=> $b->[AGE] } @rows;
for my $row_ref (@rows) {
$csv->combine(@$row_ref);
print $csv->string(), "\n";
}
__DATA__
name,25,female
name,24,male
name,27,female
name,21,male
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With