Ich suche nach einer Liste von Domain-Namen (eine Webfilter-Whitelist), beginnend mit der TLD und aufwärts. Ich suche alle * nix oder Windows-Tools, die dies leicht tun können, obwohl ein Skript auch in Ordnung wäre.
Also, wenn das die Liste ist, die Sie erhalten
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
Dies ist, was ich als Ausgabe möchte.
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
Nur für den Fall, dass Sie sich fragen, warum Squidguard einen Bug / Designfehler hat. Wenn beide www.example.com
und example.com
beide in einer Liste enthalten sind, wird der example.com
Eintrag ignoriert und Sie können nur Inhalte von aufrufen www.example.com
. Ich habe mehrere große Listen, die bereinigt werden müssen, weil jemand Einträge hinzugefügt hat, ohne vorher nachzuschauen.
com
Domains nicht vorheredu
in Ihrer sortierten Liste erscheinen?Antworten:
Dieses einfache Python-Skript macht, was Sie wollen. In diesem Beispiel benenne ich die Datei
domain-sort.py
:Um es auszuführen, benutze:
Beachten Sie, dass das sieht ein wenig hässliche , da ich dies als mehr oder weniger ein einfacher Einzeiler ich benutzen musste schrieb Slice - Notation von
[::-1]
wo negativen Werten arbeiten , um eine Kopie der gleichen Liste in umgekehrter Reihenfolge zu machen , anstatt die mehr deklarativen die Verwendungreverse()
des Wird auf eine Weise implementiert, die die Kompositionsfähigkeit beeinträchtigt.Und hier ist eine etwas längere, aber möglicherweise besser lesbare Version,
reversed()
die einen Iterator zurückgibt. Daher muss sie auch eingebunden werdenlist()
, um den Iterator zu konsumieren und eine Liste zu erstellen:Bei einer Datei mit 1.500 zufällig sortierten Zeilen dauert es ~ 0,02 Sekunden:
Bei einer Datei mit 150.000 zufällig sortierten Zeilen dauert es etwas mehr als 3 Sekunden:
Hier ist eine wahrscheinlich besser lesbare Version, die das
reverse()
undsort()
an Ort und Stelle ausführt , aber in der gleichen Zeit ausgeführt wird und tatsächlich etwas mehr Speicher benötigt.Bei einer Datei mit 1.500 zufällig sortierten Zeilen dauert es ~ 0,02 Sekunden:
Bei einer Datei mit 150.000 zufällig sortierten Zeilen dauert es etwas mehr als 3 Sekunden:
quelle
data.sort(key=lambda x: x[1:])
Hier ist ein PowerShell-Skript, das tun sollte, was Sie wollen. Grundsätzlich werden alle TLDs in ein Array geworfen, umgedreht, sortiert, in die ursprüngliche Reihenfolge zurückgeführt und dann in einer anderen Datei gespeichert.
Lief es auf 1.500 Datensätzen - dauerte 5 Sekunden auf einem einigermaßen leistungsstarken Desktop.
quelle
cat domain.txt | rev | sortieren | rev
quelle
rev domain.txt|sort|rev
Etwas weniger kryptisch oder zumindest hübscher, Perl:
Dies ist ein einfaches Beispiel für eine Guttman-Rosler-Transformation : Wir konvertieren die Zeilen in die entsprechende sortierbare Form (hier teilen wir den Domänennamen in Punkte auf und kehren die Reihenfolge der Teile um), sortieren sie mit der systemeigenen lexikografischen Sortierung und konvertieren dann die Linien zurück in ihre ursprüngliche Form.
quelle
In Unix-Skripten: umkehren, sortieren und umkehren:
quelle
awk -F. '{for(i=NF;i>0;i--){printf ".%s",$i};printf "\t%s\n",$0}' file|sort|cut -f2
Möglicherweise möchten Sie lokale Hosts zuerst mitgrep \. file | awk ...
Hier ist es in (kurz und kryptisch) Perl:
quelle
/usr/bin/time -v
für die verstrichene Zeit und max Speicherstatistiken verwendet.Dies bewirkt, dass jedes in der Domain hinterlegte Feld umgedreht, sortiert und zurückgedreht wird.
Dies sortiert die Domain-Liste, lexikographisch basierend auf jedem Teil des Domain-Namens, von rechts nach links.
Die umgekehrte Lösung (
rev <<<filename>>> | sort | rev
; nicht) habe ich ausprobiert.quelle