perl-按数字降序排序,然后按字母顺序排序

perl-按数字降序排序,然后按字母顺序排序,perl,sorting,numerical,alphabetical,Perl,Sorting,Numerical,Alphabetical,好的,现在有一个任务在手:取一个平面数据文件,根据数组中某个元素的数值对内容进行排序,然后按字母顺序排序(同时保留降序数字排序顺序) 数据文件如下所示: data1*oranges*3 data2*zebras*23 data3*apples*456 data4*pears*2 data5*orangutans*3 data6*peaches*1 因此,我们希望输出为: data3*apples*456 data2*zebras*23 data1*oranges*3 data5*orangut

好的,现在有一个任务在手:取一个平面数据文件,根据数组中某个元素的数值对内容进行排序,然后按字母顺序排序(同时保留降序数字排序顺序)

数据文件如下所示:

data1*oranges*3
data2*zebras*23
data3*apples*456
data4*pears*2
data5*orangutans*3
data6*peaches*1
因此,我们希望输出为:

data3*apples*456
data2*zebras*23
data1*oranges*3
data5*orangutans*3
data4*pears*2
data6*peaches*1

我不知所措,真的找不到任何能解决我在这里需要做的事情。我非常感谢任何人在解决这个问题时提供的意见。

首先,将字符串分成要比较的部分。然后,比较各个部分

my @sorted = sort {
   my @fields_a = split /\*/, $a;
   my @fields_b = split /\*/, $b;
   $fields_b[2] <=> $fields_a[2] || $fields_a[1] cmp $fields_b[1]
} @unsorted;
my@sorted=sort{
我的@fields\u a=split/\*/,$a;
我的@fields\u b=split/\*/,$b;
$fields_b[2]$fields_a[2]| |$fields_a[1]cmp$fields_b[1]
}@未分类;
减少重复工作:

my @sorted =
   map $_->[0],
   sort { $b->[3] <=> $a->[3] || $a->[2] cmp $b->[2]
   map [ $_, split /\*/ ],
   @unsorted;
my@sorted=
地图$\u0->[0],
排序{$b->[3]$a->[3]| |$a->[2]cmp$b->[2]
映射[$\,拆分/\*/],
@未分类;

在*nix中,可以使用
排序-t\*-k3rn-k2,2