Arquivo de entrada original
Assumindo o seguinte formato de entrada:
http://www.google.com,
www.google.com,
google.com
yahoo.com
Com um resultado assim:
google.com : 3
yahoo.com : 1
É difícil determinar toda a situação em que você está, mas, dada a saída que você está nos mostrando, eu estaria inclinado a converter o arquivo de entrada primeiro, para que todas as linhas fiquem no formato:
google.com
google.com
google.com
yahoo.com
E, em seguida, execute este arquivo por meio do seguinte conjunto de comandos:
$ grep -v "^$" data.txt | \
sed -e 's/,$//' -e 's/.*\.\(.*\)\.\(.*\)$/./' | \
sort | uniq -c
3 google.com
1 yahoo.com
Você pode limpar o formato da saída para que corresponda ao que você deseja da seguinte forma:
$ grep -v "^$" data.txt | \
sed -e 's/,$//' -e 's/.*\.\(.*\)\.\(.*\)$/./' | \
sort | uniq -c | \
awk '{printf "%s : %s\n", $1, $2}'
google.com : 3
yahoo.com : 1
EDIT # 1
O OP teve uma pergunta de acompanhamento em que ele alterou as entradas no exemplo. Então, para contar este tipo de entrada:
http://www.google.com/absd/siidfs/kfd837382$%^$&,
www.google.com,
google.com
yahoo.com/list/page/jhfjkshdjf...
Você pode usar este verso adaptado do primeiro exemplo:
$ grep -v "^$" data2.txt | \
sed -e 's/,$//' \
-e 's#\(http://[^/]\+\).*##' \
-e '/^[^http]/ s/^www\.//' \
-e '/^[^http]/ s#\([^/]\+\).*$##' | \
sort | uniq -c | \
awk '{printf "%s : %s\n", $1, $2}'
2 : google.com
1 : http://www.google.com
1 : yahoo.com