perl - 排序文件夹时忽略文件名中的数字
perl - ignore numbers in file name while sorting folder
我想仅根据文件名的非数字部分对文件夹中的文件进行排序。文件名的一般格式如下:
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
排序文件的预期顺序与上述相反:
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
Perl 文档中是否遗漏了 sort
的变体,或者我无论如何都需要使用正则表达式?谢谢你的帮助。
它将删除所有数字,然后按升序对字符串进行排序,
my @arr = qw(
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
);
@arr = map $_->[0],
sort { $a->[1] cmp $b->[1] }
map [ $_, tr|0-9||dr ], @arr;
更大的数据样本会更好,但是这个程序展示了如何使用排序块来比较删除所有数字的字符串
use utf8;
use strict;
use warnings;
use 5.010;
my @files = <DATA>;
chomp @files;
say for sort {
my ($aa, $bb) = map tr/0-9//dr, $a, $b;
$aa cmp $bb;
} @files;
__DATA__
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
输出
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
我想仅根据文件名的非数字部分对文件夹中的文件进行排序。文件名的一般格式如下:
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
排序文件的预期顺序与上述相反:
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
Perl 文档中是否遗漏了 sort
的变体,或者我无论如何都需要使用正则表达式?谢谢你的帮助。
它将删除所有数字,然后按升序对字符串进行排序,
my @arr = qw(
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
);
@arr = map $_->[0],
sort { $a->[1] cmp $b->[1] }
map [ $_, tr|0-9||dr ], @arr;
更大的数据样本会更好,但是这个程序展示了如何使用排序块来比较删除所有数字的字符串
use utf8;
use strict;
use warnings;
use 5.010;
my @files = <DATA>;
chomp @files;
say for sort {
my ($aa, $bb) = map tr/0-9//dr, $a, $b;
$aa cmp $bb;
} @files;
__DATA__
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
输出
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.7_Other.ext
BLA_SomeText_2015-07-16_12-00-05_v2.6.6.6_OtherText.ext