ドメインのリストがあります。例は次のとおりです。
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.com
とmedia.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