Saya mencari untuk mengurutkan daftar nama domain (daftar putih filter web) mulai dari TLD dan bekerja ke atas. Saya mencari * nix atau alat windows yang dapat melakukan ini dengan mudah, meskipun skrip juga akan baik-baik saja.
Jadi jika daftar yang Anda berikan
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
Inilah yang saya inginkan sebagai output.
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
Kalau-kalau Anda bertanya-tanya mengapa, Squidguard, memiliki cacat bug / desain. Jika keduanya www.example.com
dan example.com
keduanya termasuk dalam daftar, maka example.com
entri tersebut diabaikan dan Anda hanya dapat mengunjungi konten dari www.example.com
. Saya memiliki beberapa daftar besar yang perlu dibersihkan karena seseorang menambahkan entri tanpa melihat terlebih dahulu.
com
domain muncul sebelumnyaedu
dalam daftar Anda yang diurutkan?Jawaban:
Skrip python sederhana ini akan melakukan apa yang Anda inginkan. Dalam contoh ini saya memberi nama file
domain-sort.py
:Untuk menjalankannya gunakan:
Perhatikan bahwa ini terlihat sedikit lebih buruk karena saya menulis ini lebih atau kurang satu-liner sederhana saya harus menggunakan notasi irisan di
[::-1]
mana nilai-nilai negatif bekerja untuk membuat salinan dari daftar yang sama dalam urutan terbalik daripada menggunakan lebih deklaratifreverse()
yang melakukannya di tempat dengan cara yang merusak kompabilitas.Dan ini versi yang sedikit lebih panjang, tapi mungkin lebih mudah dibaca yang menggunakan
reversed()
yang mengembalikan iterator, maka perlu juga membungkusnyalist()
untuk mengkonsumsi iterator dan menghasilkan daftar:Pada file dengan 1.500 garis yang diurutkan secara acak, dibutuhkan ~ 0,02 detik:
Pada file dengan 150.000 garis yang disortir secara acak, dibutuhkan sedikit lebih dari 3 detik:
Ini adalah versi yang bisa dibilang lebih mudah dibaca yang melakukan
reverse()
dansort()
di tempat, tetapi berjalan dalam jumlah waktu yang sama, dan sebenarnya membutuhkan sedikit lebih banyak memori.Pada file dengan 1.500 garis yang diurutkan secara acak, dibutuhkan ~ 0,02 detik:
Pada file dengan 150.000 garis yang disortir secara acak, dibutuhkan sedikit lebih dari 3 detik:
sumber
data.sort(key=lambda x: x[1:])
Berikut ini skrip PowerShell yang harus melakukan apa yang Anda inginkan. Pada dasarnya itu melemparkan semua TLD ke dalam array membalikkan setiap TLD, mengurutkannya, membalikkannya kembali ke urutan aslinya, dan kemudian menyimpannya ke file lain.
Jalankan dengan 1.500 catatan - butuh 5 detik pada desktop yang cukup kuat.
sumber
cat domain.txt | rev | sortir | putaran
sumber
rev domain.txt|sort|rev
Sedikit kurang samar, atau setidaknya lebih cantik, Perl:
Ini adalah contoh sederhana dari transformasi Guttman-Rosler : kami mengubah garis menjadi bentuk yang dapat diurutkan yang sesuai (di sini, pisahkan nama domain pada periode dan membalik urutan bagian-bagian), mengurutkannya menggunakan jenis leksikografi asli dan kemudian mengonversi garis kembali ke bentuk aslinya.
sumber
Di skrip Unix: membalikkan, mengurutkan dan membalikkan:
sumber
awk -F. '{for(i=NF;i>0;i--){printf ".%s",$i};printf "\t%s\n",$0}' file|sort|cut -f2
Mungkin ingin menghapus host lokal terlebih dahulu dengangrep \. file | awk ...
Ini dia dalam perl (pendek dan samar):
sumber
/usr/bin/time -v
untuk waktu berlalu dan statistik memori maks.Apa yang dilakukan adalah membalik setiap diajukan dalam nama domain, mengurutkan dan membalikkan kembali.
Ini benar-benar mengurutkan daftar domain, berdasarkan leksikografis pada setiap bagian nama domain, dari kanan ke kiri.
Solusi terbalik (
rev <<<filename>>> | sort | rev
), tidak, saya sudah mencobanya.sumber