【问题标题】:How to sort list of domain names by subdomain followed by (top level domain name) TLD如何按子域后跟(顶级域名)TLD对域名列表进行排序
【发布时间】:2014-09-17 04:47:08
【问题描述】:

我有一个包含几行域名的文件,如下所示

yahoo.com
somesite.cc
mysite.net
voa.org
voa.co.aus
www.voa.org
google.com

我必须读取文件并首先按 TLD(com、co、net 等)排序,然后是域名(yahoo、google、voa 等)和子域名(aus、in 等)。排序后,我必须将它们保存在文件中。排序后的文件输出应该是

somesite.cc
voa.co.aus
voa.co.in
google.com
yahoo.com
mysite.net
voa.org

如果有人给我一个先机,那就太好了。

谢谢

【问题讨论】:

  • 根据您的需要,您可能需要外部资源或远远超过正则表达式/拆分/排序。为什么?因为如果你有example.co.uk,那么正确的拆分是example + co.uk 而不是example.couk。这种情况更加复杂,因为现在您可以直接在.uk下注册,而以前不是这样。您有很多这样的情况,并且没有自动处理它们的方法。看看“公共后缀列表”。

标签: perl


【解决方案1】:

您必须构建一个自定义 sort,如下所示:

use strict;
use warnings;

use List::Util qw(max);

chomp( my @data = <DATA> );

my @sorted = sort {
    my ( $aa, $bb ) = map [ reverse split /\./ ], ( $a, $b );
    (   grep {$_}
        map { ( $aa->[$_] // '' ) cmp ( $bb->[$_] // '' ) }
        ( 0 .. max( $#$aa, $#$bb ) )
    )[0] // 0
} @data;


print "$_\n" for @sorted;

__DATA__
yahoo.com
somesite.cc
mysite.net
voa.org
voa.co.aus
www.voa.org
google.com

输出:

voa.co.aus
somesite.cc
google.com
yahoo.com
mysite.net
voa.org
www.voa.org

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多