サブドメインまたは既存のドメインの削除

サブドメインまたは既存のドメインの削除

ドメインのリストがあります。例は次のとおりです。

account.google.com
drive.google.com
google.com
bgoogle.com
yahoo.co.uk
stats.wikipedia.org
media.wikipedia.org
files.media.wikipedia.org
bible.com

既存のドメインのサブドメインをすべて削除したいと思います。たとえば、上記のリストの場合google.commedia.wikipedia.orgサブドメインがあるため、そのサブドメインを削除する必要があります。

したがって、上記のリストの結果は次のようになります。

google.com
bgoogle.com
yahoo.co.uk
stats.wikipedia.org
media.wikipedia.org
bible.com

Pythonでいくつかのコードを書いてみましたが、完了するのに時間がかかります。これを最も速くするにはどうすればよいですか?

ベストアンサー1

.あなたの質問は、「追いつかない最長のaだけを維持し、行の終わりまでは何も維持しない.でください。これを一意にしてください」と再定式化できるように聞こえます。.その場合は、次のことができます。

$ awk -F"." -v OFS="." '{print $(NF-1),$(NF)}' file | sort -u
bgoogle.com
bible.com
google.com
wikipedia.org

または、すべてのタスクを実行するには、次の手順を実行しますawk

$ awk -F"." '{ k[$(NF-1)"."$(NF)]++}END{for (i in k){print i}}' file 
bgoogle.com
bible.com
wikipedia.org
google.com

またはGNU grep

$ grep -oP '[^.]+\.[^.]+$' file  | sort -u
bgoogle.com
bible.com
google.com
wikipedia.org

またはPerlとGNUの並べ替え

$ perl -pe 's/.*?([^.]+\.[^.]+$)/$1/' file | sort -u
bgoogle.com
bible.com
google.com
wikipedia.org

または単にパール

$ perl -ne '$k{$1}++ for s/.*?([^.]+\.[^.]+$)/$1/; END{ print keys(%k) }' file 
bible.com
bgoogle.com
wikipedia.org
google.com

または単にパール

$ perl -ne 's/.*?([^.]+\.[^.]+)$/$1/; next if ++$k{$1}>1; print' file 
google.com
bgoogle.com
wikipedia.org
bible.com

またはsedとソート

$ sed -E 's/.*\.([^.]+\.[^.]+)$/\1/' file | sort -u
bgoogle.com
bible.com
google.com
wikipedia.org

おすすめ記事