Tld থেকে শুরু করে এবং বামে কাজ করা ডোমেন নামগুলির একটি তালিকা (এফকিউডিএন) বাছাই করুন


20

আমি টিএলডি থেকে শুরু করে উপরের দিকে কাজ করে ডোমেন নামগুলির (একটি ওয়েব ফিল্টার শ্বেত তালিকা) একটি তালিকা সাজানোর জন্য দেখছি। আমি এমন কোনও * নিক্স বা উইন্ডোজ সরঞ্জাম দেখছি যা এটি সহজেই করতে পারে, যদিও স্ক্রিপ্টটিও ঠিক আছে।

সুতরাং যদি তালিকাটি আপনাকে দেওয়া হয়

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

কেবলমাত্র আপনি যদি ভাবছেন যে কেন, স্কুইডগার্ডের একটি বাগ / ডিজাইনের ত্রুটি রয়েছে। যদি উভয়ই হয় www.example.comএবং example.comউভয়ই একটি তালিকায় অন্তর্ভুক্ত থাকে তবে example.comপ্রবেশটি এড়ানো হবে এবং আপনি কেবল এখান থেকে সামগ্রী দেখতে পারবেন www.example.com। আমার বেশ কয়েকটি বৃহত তালিকা রয়েছে যাতে কিছু সাফ করা দরকার কারণ কেউ আগে না দেখিয়ে এন্ট্রি যুক্ত করেছে।


আপনার সাজানো তালিকায় comডোমেনগুলি উপস্থিত হওয়া উচিত নয় edu?
সোভেন

9
হ্যাঁ, আমি ম্যানুয়াল বাছাইয়ে ব্যর্থ হয়েছি, এ কারণেই আমি একটি সরঞ্জাম খুঁজছি। :)
জোড়দাছে

1
স্ট্যাকওভারফ্লো / প্রশ্ন / 342590 / sorting- domain- names ?
মার্ক ওয়াগনার

3
এছাড়াও, পারথ সংস্করণের তুলনায় পাইথন সংস্করণটি দুর্দান্ত রয়েছে কারণ অজগরগুলির সাজানো তালিকার তালিকায় কাজ করে; পার্ল এর ধরণের প্রয়োগ হয় না এবং প্রয়োগ করতে হবে।
মার্ক ওয়াগনার

1
সাইড নোটে এটি আরও চ্যালেঞ্জিং হবে যদি ওপিকে মজিলার পাবলিক প্রত্যয় ( পাবলিকসুফিক্স.অর্গ ) তালিকা অনুসারে শীর্ষ-ডোমেনগুলি একটি ব্লক হিসাবে পরিচালিত করার জন্য বলা হত । আমি কিছুটা সময়ে এটি করতে ঘুরতে আসতে পারি (এটি কোনও প্রকল্পের জন্য সুন্দর হতে হবে), অন্য কেউ আগ্রহী?
পিএইচকে

উত্তর:


15

এই সাধারণ অজগর স্ক্রিপ্টটি যা চাইবে তা করবে। এই উদাহরণে আমি ফাইলটির নাম দিন domain-sort.py:

#!/usr/bin/env python
from fileinput import input
for y in sorted([x.strip().split('.')[::-1] for x in input()]): print '.'.join(y[::-1])

এটি চালাতে ব্যবহার করুন:

cat file.txt | ./domain-sort.py

নোট করুন যে এটি কিছুটা খারাপ দেখা যাচ্ছে কারণ আমি এটিকে কম বা একটি সহজ ওয়ান-লাইনার হিসাবে লিখেছি যেখানে আমাকে নেতিবাচক মানগুলি আরও বেশি ঘোষণামূলক ব্যবহারের পরিবর্তে বিপরীত ক্রমে একই তালিকার অনুলিপি তৈরির জন্য কাজ করতে হয় তার স্লাইস নোটেশন[::-1] ব্যবহার করতে হয়েছিল which এটি স্থিরভাবে এমনভাবে করে যাতে সামঞ্জস্যতা ভেঙে যায়।reverse()

এবং এখানে কিছুটা দীর্ঘ, তবে সম্ভবত আরও পঠনযোগ্য সংস্করণ যা ব্যবহার করে reversed()যা একটি পুনরুক্তি ফেরত দেয়, সুতরাং এটির list()পুনরুক্তি গ্রহণ এবং একটি তালিকা তৈরির জন্য এটি মোড়ানোর প্রয়োজনও :

#!/usr/bin/env python
from fileinput import input
for y in sorted([list(reversed(x.strip().split('.'))) for x in input()]): print '.'.join(list(reversed(y)))

1,500 এলোমেলোভাবে বাছাই করা লাইনের সাথে একটি ফাইলে এটি ~ 0.02 সেকেন্ড সময় নেয়:

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.02
Maximum resident set size (kbytes): 21632

১৫০,০০০ এলোমেলোভাবে বাছাই করা রেখাসহ একটি ফাইলে এটি 3 সেকেন্ডেরও বেশি সময় নেয়:

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.20
Maximum resident set size (kbytes): 180128

এখানে একটি তর্কযোগ্যভাবে আরও পঠনযোগ্য সংস্করণ রয়েছে যা স্থান reverse()এবং অন্তর্ভুক্ত করে sort()তবে এটি একই পরিমাণে চলে এবং প্রকৃতপক্ষে আরও কিছুটা স্মৃতি লাগে takes

#!/usr/bin/env python
from fileinput import input

data = []
for x in input():
   d = x.strip().split('.')
   d.reverse()
   data.append(d)
data.sort()
for y in data:
   y.reverse()
   print '.'.join(y)

1,500 এলোমেলোভাবে বাছাই করা লাইনের সাথে একটি ফাইলে এটি ~ 0.02 সেকেন্ড সময় নেয়:

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.02
Maximum resident set size (kbytes): 22096

১৫০,০০০ এলোমেলোভাবে বাছাই করা রেখাসহ একটি ফাইলে এটি 3 সেকেন্ডেরও বেশি সময় নেয়:

Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.08
Maximum resident set size (kbytes): 219152

আমি প্রচুর সমাধান দেখতে পছন্দ করি। আমি পাইথন ভিত্তিক উত্তরটি বেশিরভাগ ক্ষেত্রেই গ্রহণ করছি কারণ এটি আমার অন্যান্য স্ক্রিপ্টগুলির বেশিরভাগ ক্ষেত্রে আমি ব্যবহার করি। অন্যান্য উত্তরগুলিও কার্যকর বলে মনে হচ্ছে।
জোড়ডেচি

1
যদি কেউ প্রথমে ডোমেইন নাম অনুসারে বাছাই করতে আগ্রহী, টিএলডি উপেক্ষা করে, ব্যবহার করুনdata.sort(key=lambda x: x[1:])
Calimo

9

এখানে একটি পাওয়ারশেল স্ক্রিপ্ট রয়েছে যা আপনার যা করা উচিত তা করা উচিত। মূলত এটি সমস্ত টিএলডিকে একটি অ্যারেতে ফেলে দেয় প্রতিটি টিএলডিকে বিপরীত করে, সাজায়, এটিকে তার মূল ক্রমে ফিরিয়ে দেয় এবং তারপরে এটি অন্য কোনও ফাইলে সংরক্ষণ করে।

$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

এটি 1,500 রেকর্ডে চালান - যুক্তিসঙ্গত শক্তিশালী ডেস্কটপে 5 সেকেন্ড সময় নিয়েছিল।


এই স্ক্রিপ্টটিকে ব্যাশ বা অন্য কোন ভাষায় রূপান্তর করা আমার পক্ষে মোটামুটি সহজ হওয়া উচিত।
মার্ক হেন্ডারসন

5 সেকেন্ডে দীর্ঘ 1,500 লাইনের জন্য দীর্ঘ সময় লাগে। আমার অজগর বাস্তবায়ন এক সেকেন্ডের ভগ্নাংশে 1,500 এবং মাত্র 3 সেকেন্ডের মধ্যে 150,000 করে। আপনি কী মনে করেন যে পাওয়ারশেল এটিকে এত ধীর করে তুলেছে?
অ্যাকুলিচ

হ্যাঁ এটি অনেক দিন। যদিও এতক্ষণ লাগছে কেন আমি জানিনা। সম্ভবত কারণ পাওয়ারশেল আসলে এই জাতীয় কাজগুলি করার লক্ষ্য নয়।
মার্ক হেন্ডারসন

7

বিড়াল ডোমেইন। txt | রেভ | সাজানো | এনজিনের পার


আমি মনে করি এটি কাজ করবে। আমি টিএলডি যদিও বাছাই করা পছন্দ করি, এবং এটি অর্জন করবে না। এটি ব্যবহার করে, আমার উদাহরণে টিএলডিগুলি ক্রমানুসারে হবে (ইউকে, মিল, পিএল, কম, এডু, গভ) যেহেতু এটি ডোমেনের সীমানার পরিবর্তে একটি সরল ডান থেকে বাম সাজান।
জোরেডেচ

আমি দেখেছি সেরা উত্তর!
ড্যানিয়েল

1
rev domain.txt|sort|rev
ধনী

6

সামান্য কম ক্রিপ্টিক, বা কমপক্ষে সুন্দর, পার্ল:

use warnings;
use strict;

my @lines = <>;
chomp @lines;

@lines =
    map { join ".", reverse split /\./ }
    sort
    map { join ".", reverse split /\./ }
    @lines;

print "$_\n" for @lines;

এটি গুটম্যান – রোসার রূপান্তরকরণের একটি সাধারণ উদাহরণ : আমরা লাইনগুলিকে যথাযথ বাছাইযোগ্য ফর্মে রূপান্তর করি (এখানে, পিরিয়ডগুলিতে ডোমেন নামটি বিভক্ত করুন এবং অংশগুলির ক্রমটি বিপরীত করুন), দেশীয় লিক্সোগ্রাফিক ক্রম ব্যবহার করে তাদের সাজান এবং তারপরে রূপান্তর করুন লাইনগুলি তাদের মূল ফর্মটিতে ফিরে আসে।


6

ইউনিক্স স্ক্রিপ্টিংয়ে: বিপরীত, সাজান এবং বিপরীত:

awk -F "." '{for(i=NF; i > 1; i--) printf "%s.", $i; print $1}' file |
  sort |
  awk -F "." '{for(i=NF; i > 1; i--) printf "%s.", $i; print $1}'

একক লুপের সাথে একই জিনিস: awk -F. '{for(i=NF;i>0;i--){printf ".%s",$i};printf "\t%s\n",$0}' file|sort|cut -f2স্থানীয় হোস্টগুলি প্রথমে ছড়িয়ে দিতে পারেgrep \. file | awk ...
সমৃদ্ধ

3

এটি এখানে (সংক্ষিপ্ত এবং রহস্যময়) পার্লটিতে রয়েছে:

#!/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" }

এই ধরণের জন্য আপনার কি সময়জ্ঞানের তথ্য আছে? আমি কীভাবে এটি @ মার্ক-হেন্ডারসনের পাওয়ারশেল বাস্তবায়নের সাথে আমার পাইথন বাস্তবায়নের সাথে তুলনা করে তা দেখতে আগ্রহী । আমি /usr/bin/time -vঅতিবাহিত সময় এবং সর্বোচ্চ মেমরির পরিসংখ্যানগুলির জন্য ব্যবহার করি used
অ্যাকুলিচ

4
পার্ল পুরোপুরি অবসন্নতায় জেতে
ম্যাসিমো

4
পার্ল স্ক্রিপ্টকে "সংক্ষিপ্ত এবং ক্রিপ্টিক" হিসাবে বর্ণনা করা অপ্রয়োজনীয়।
বেলমিন ফার্নান্দেজ

@ কুলিচ, পাওয়ারশেল স্ক্রিপ্টটি বাদ দিয়ে সমস্ত ফাইলে আমার ফাইলে 0.1 সেকেন্ডের কম সময় লাগবে বলে মনে হয়।
জোড়ডেচি

0
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}'

এটি যা করে তা হ'ল ডোমেন নামের প্রতিটি ফাইল করা বিপরীত করা, সাজানো এবং পিছনে বিপরীত।

ডান থেকে বামে ডোমেন-নামের প্রতিটি অংশের উপর ভিত্তি করে ডিক্সিকালিকভাবে এই ডোমেন তালিকাটি সাজান।

বিপরীত সমাধান ( rev <<<filename>>> | sort | rev), না, আমি চেষ্টা করেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.