web-dev-qa-db-fra.com

Triez une liste de noms de domaine (FQDNS) à partir de TLD et de travailler à gauche

Je cherche à trier une liste de noms de domaine (une blancheur de filtre Web) à partir du TLD et de travailler vers le haut. Je cherche des outils * Nix ou Windows pouvant le faire facilement, bien qu'un script irait aussi aussi.

Donc, si la liste est la liste que vous recevez

www.activityvillage.co.uk 
ajax.googleapis.com 
akhet.co.uk 
alchemy.l8r.pl 
au.af.mil 
bbc.co.uk 
bensguide.gpo.gov 
chrome.angrybirds.com 
cms.hss.gov 
crl.godaddy.com 
digitalhistory.uh.edu 
digital.library.okstate.edu 
digital.olivesoftware.com

C'est ce que je veux comme la sortie.

chrome.angrybirds.com 
crl.godaddy.com 
ajax.googleapis.com 
digital.olivesoftware.com 
digital.library.okstate.edu 
digitalhistory.uh.edu 
bensguide.gpo.gov 
cms.hss.gov 
au.af.mil 
alchemy.l8r.pl 
www.activityvillage.co.uk 
akhet.co.uk 
bbc.co.uk

Juste au cas où vous vous demandez pourquoi, Squidguard, a un défaut de bogue/de conception. Si les deux www.example.com et example.com sont tous deux inclus dans une liste, puis le example.com L'entrée est ignorée et vous ne pouvez visiter que le contenu de www.example.com. J'ai plusieurs grandes listes qui ont besoin d'un certain nettoyage parce que quelqu'un a ajouté des entrées sans avoir l'air d'abord.

23
Zoredache

Voici un script PowerShell qui devrait faire ce que vous voulez. Fondamentalement, il jette tous les TLD dans un tableau inverse chaque TLD, le trie, le renverse dans son ordre d'origine, puis l'enregistre dans un autre fichier.

$TLDs = Get-Content .\TLDsToSort-In.txt
$TLDStrings = @();

foreach ($TLD in $TLDs){
    $split = $TLD.split(".")
    [array]::Reverse($split)
    $TLDStrings += ,$split
}

$TLDStrings = $TLDStrings|Sort-Object

foreach ($TLD in $TLDStrings){[array]::Reverse($TLD)}

$TLDStrings | %{[string]::join('.', $_)} | Out-File .\TLDsToSort-Out.txt

Ran It sur 1 500 enregistrements - a pris 5 secondes sur un bureau raisonnablement puissant.

10
Mark Henderson

Ici, c'est dans (court et cryptique) Perl:

#!/usr/bin/Perl -w
@d = <>; chomp @d;
for (@d) { $rd{$_} = [ reverse split /\./ ] }
for $d (sort { for $i (0..$#{$rd{$a}}) {
        $i > $#{$rd{$b}} and return 1;
        $rd{$a}[$i] cmp $rd{$b}[$i] or next;
        return $rd{$a}[$i] cmp $rd{$b}[$i];
} } @d) { print "$d\n" }
3
Mark Wagner
awk -F"." 's="";{for(i=NF;i>0;i--) {if (i<NF) s=s "." $i; else s=$i}; print s}' <<<filename>>> | sort | awk -F"." 's="";{for(i=NF;i>0;i--) {if (i<NF) s=s "." $i; else s=$i}; print s}'

Ce que cela fait est d'inverser chaque fichier dans le nom de domaine, de trier et de retourner en arrière.

Ceci trie vraiment la liste de domaines, basé sur une base lexicographique sur chaque partie du nom de domaine, de droite à gauche.

La solution inverse (rev <<<filename>>> | sort | rev), ne le fait pas, je l'ai essayé.

0
Mike Rudra