gpt4 book ai didi

linux - 如何使用 Perl 对国会图书馆 (LCC) 编号进行排序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:42 24 4
gpt4 key购买 nike

假设我有这些国会图书馆 (LCC) 编号:

BX2230.3
BX2237
BX2380 .R67 2002
BX932 .C53 1993

在 Linux 上使用 sortsort -b 忽略空格命令它们如下:

BX2230.3
BX2237
BX2380 .R67 2002
BX932 .C53 1993

但是,它们应该这样排序:

BX932 .C53 1993
BX2230.3
BX2237
BX2380 .R67 2002

有没有办法用 sortperl 来做到这一点? In order words:每行的前两个字符按字母顺序排序,前两个字符后面的数字按数字顺序排序,“.”后面的字母。 (如果存在)按字母顺序排列,后面的数字按数字顺序排列?

最佳答案

有一个模块Library::CallNumber::LC特别是为了这个目的。它有一个 normalize 方法,可将 LCN 转换为可直接排序的内容。它将您的号码列表更改为此

BX22303
BX2237
BX2380 R67 02002
BX0932 C53 01993

所以你可以这样排序你的数字

use strict;
use warnings 'all';

use Library::CallNumber::LC;

my @numbers = (
'BX2230.3',
'BX2237',
'BX2380 .R67 2002',
'BX932 .C53 1993',
);

print "$_\n" for sort {
my ($aa, $bb) = map { Library::CallNumber::LC->normalize($_) } ($a, $b);
$aa cmp $bb;
} @numbers;

输出

BX932 .C53 1993
BX2230.3
BX2237
BX2380 .R67 2002

关于linux - 如何使用 Perl 对国会图书馆 (LCC) 编号进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36638173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com