如何按子域后跟(顶级域名)TLD对域名列表进行排序

时间:2014-09-17 04:47:08

标签: perl

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

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 etc)。排序后我必须将它们保存在一个文件中。排序的文件输出应为

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

如果有人给我一个良好的开端,这将是伟大的。

由于

1 个答案:

答案 0 :(得分: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