У меня текстовый файл с разделителями-запятыми. Я хочу отсортировать файл сначала по 3-му столбцу, затем по 2-му столбцу, затем по 1-му столбцу.
Однако я хочу, чтобы 3-й столбец сортировался по алфавиту, причем сначала будет самое длинное значение.
Например, AAA, затем AA, затем A, затем BBB, затем BB, затем B, затем CCC, затем CC и т. Д.
Input (alpha-sort-test2. txt):
JOHN,1,A
MARY,3,AA
FRED,5,BBB
SAM,7,A
JOHN,3,AAA
JOHN,2,AAA
BETTY,2,AAA
JARROD,7,AAA
JOANNE,2,BB
AMANDA,2,DD
AMY,5,B
PETE,7,CC
MATT,4,B
SARAH,3,CCC
GEORGE,3,CC
AMANDA,3,AAA
Код Perl, который у меня есть на данный момент, выглядит следующим образом:
$infile = "alpha-sort-test2.txt";
$outfile = "alpha-sort-test-sorted2.txt";
open (INFILE, "<$infile") or die "Could not open file $infile $!";
open (OUTFILE, ">$outfile");
my @array = sort howtosort <INFILE>;
foreach (@array)
{
chomp;
print "$_\n";
print OUTFILE "$_\n";
}
sub howtosort
{
my @flds_a = split(/,/, $a);
my @flds_b = split(/,/, $b);
$flds_a[2] cmp $flds_b[2];
}
close INFILE;
close OUTFILE;
Токовый выход (alpha-sort-test-sorted2.txt):
JOHN,1,A
SAM,7,A
MARY,3,AA
AMANDA,3,AAA
JOHN,3,AAA
JOHN,2,AAA
BETTY,2,AAA
JARROD,7,AAA
AMY,5,B
MATT,4,B
JOANNE,2,BB
FRED,5,BBB
PETE,7,CC
GEORGE,3,CC
SARAH,3,CCC
AMANDA,2,DD
Желаемый вывод:
BETTY,2,AAA
JOHN,2,AAA
AMANDA,3,AAA
JOHN,3,AAA
JARROD,7,AAA
MARY,3,AA
JOHN,1,A
SAM,7,A
FRED,5,BBB
JOANNE,2,BB
MATT,4,B
AMY,5,B
SARAH,3,CCC
GEORGE,3,CC
PETE,7,CC
AMANDA,2,DD
Заранее спасибо.