Veja como você faria isso em Perl:
$ cat a.txt
.artnau.com
.bar.foo.example.org
.chatserve.com
.css.artnau.com
.eagles.chatserve.com
.example.com
.foo.example.org
$ cat a.txt | perl -ne 'BEGIN { my %h; } $h{$_} = ""; END { foreach (keys %h) { $orig = $_; $_ =~ s/^\..*?\./\./; print $orig if not exists $h{$_} } }' | sort > b.txt
$ cat b.txt
.artnau.com
.chatserve.com
.example.com
.foo.example.org
O one-liner Perl percorre a.txt
e adiciona cada linha a um hash chamado %h
. Após cada linha do arquivo ser adicionada, ela passa por todas as chaves do hash, remove a primeira parte do domínio (o primeiro período até o segundo período) e, se a sequência resultante não estiver no hash, imprime. A saída é então canalizada através de sort
(você provavelmente pode adivinhar o que isso faz) e salva em b.txt
.