#!/usr/bin/perl -w use strict; use warnings; use diagnostics; use Text::CSV_XS; my @rows; my $csv = Text::CSV_XS->new ( { binary => 1 } ) # should set binary attribute. or die "Cannot use CSV: ".Text::CSV->error_diag (); my $expcol = 45; # Expect this many columns my $lineno = 0; while () { my $line = $_; chomp($line); $lineno++; #print "$lineno: $line\n"; if (! $csv->parse($line)) { warn "$lineno: skip due to parse error: ".$csv->input_error(); next; } my @columns = $csv->fields(); warn "$lineno: unexpected number of columns=".scalar(@columns).", was expecting $expcol" if scalar(@columns) != $expcol; push (@rows, \@columns); } $lineno = 0; foreach my $row ( sort { $a->[0] cmp $b->[0] || $a->[44] <=> $b->[44] } @rows ) { $lineno++; print "$lineno: ".join(", ", @$row)."\n"; }