Я ищу, чтобы отсортировать список доменных имен (белый список веб-фильтров), начиная с TLD и работая вверх. Я ищу любые инструменты * nix или windows, которые могут сделать это легко, хотя сценарий тоже подойдет.
Так что, если список вам дан
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
Это то, что я хочу в качестве вывода.
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
На тот случай, если вам интересно, почему у Squidguard есть ошибка в дизайне. Если оба www.example.com
и example.com
оба включены в список, то example.com
запись игнорируется, и вы можете просматривать только контент из www.example.com
. У меня есть несколько больших списков, которые нуждаются в некоторой очистке, потому что кто-то добавил записи без предварительного просмотра.
com
домены не должны появляться раньшеedu
в вашем отсортированном списке?Ответы:
Этот простой скрипт на Python сделает то, что вы хотите. В этом примере я называю файл
domain-sort.py
:Для запуска используйте:
Обратите внимание , что это выглядит немного уродливее , так как я написал это как более или менее простой один лайнер я должен был использовать ломтик обозначение
[::-1]
, где работают отрицательные значения , чтобы сделать копию одного и тот же список в обратном порядке , вместо того , чтобы использовать более декларативный ,reverse()
который делает это на месте таким образом, что нарушает компоновку.А вот немного более длинная, но, возможно, более читаемая версия, в
reversed()
которой используется итератор, поэтому необходимо также обернуть его,list()
чтобы использовать итератор и создать список:Для файла с 1500 случайно отсортированными строками это занимает ~ 0,02 секунды:
Для файла с 150000 случайно отсортированных строк это занимает чуть более 3 секунд:
Вот, пожалуй, более читаемая версия, которая выполняет операции «на месте»
reverse()
и «sort()
на месте», но работает за то же время и фактически занимает немного больше памяти.Для файла с 1500 случайно отсортированными строками это занимает ~ 0,02 секунды:
Для файла с 150000 случайно отсортированных строк это занимает чуть более 3 секунд:
источник
data.sort(key=lambda x: x[1:])
Вот сценарий PowerShell, который должен делать то, что вы хотите. По сути, он выбрасывает все TLD в массив, переворачивает каждый TLD, сортирует его, возвращает его в исходный порядок, а затем сохраняет в другом файле.
Запустил его на 1500 записях - заняло 5 секунд на достаточно мощном рабочем столе.
источник
кошка domain.txt | рев | сортировать | оборот
источник
rev domain.txt|sort|rev
Чуть менее загадочный или, по крайней мере, более красивый Perl:
Это простой пример преобразования Гутмана – Рослера : мы преобразуем строки в соответствующую сортируемую форму (здесь, разбиваем доменное имя по периодам и меняем порядок частей), сортируем их, используя собственную лексикографическую сортировку, а затем преобразуем линии обратно в исходную форму.
источник
В сценариях Unix: обратный, сортировка и обратный:
источник
awk -F. '{for(i=NF;i>0;i--){printf ".%s",$i};printf "\t%s\n",$0}' file|sort|cut -f2
возможно, сначала нужно удалить локальных хостовgrep \. file | awk ...
Вот он (короткий и загадочный) Perl:
источник
/usr/bin/time -v
для прошедшего времени и максимальную статистику памяти.То, что это делает, это переворачивает каждое поле в имени домена, сортирует и переворачивает обратно.
Это действительно сортирует список доменов, лексикографически основанный на каждой части имени домена, справа налево.
Обратного решения (
rev <<<filename>>> | sort | rev
) нет, я пробовал.источник