【发布时间】:2020-05-26 12:44:55
【问题描述】:
我有一个逗号分隔的文本文件。我想先按第 3 列、第 2 列、第 1 列对文件进行排序。
但是,我希望第 3 列按字母顺序排序,最长的值在前。
例如,AAA,然后是 AA,然后是 A,然后是 BBB,然后是 BB,然后是 B,然后是 CCC,然后是 CC,等等。
输入(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
提前致谢。
【问题讨论】: