URL からドメインを抽出する
Day7 からインスパイヤされて URL からドメインらしきものを抽出するスクリプトを書いてみます。 ただし、最初に断っておかなければならないのは、こうした方法はあくまで「ドメインっぽい文字列」の抽出であって、ドメインを正しく抽出できているとは限りませんし、そのドメインが存在するかどうかも分からないということです。
プログラムとしては以下のようになります。
#! /usr/loca/bin/nawk -f
# url2domain.awk
# URL からドメインを抽出します。
# usage: nawk -f url2domain.awk file[s]
{
print url2domain($0);
}
# url2domain(): URL からドメインを抽出する
# in: URL (url)
# out: ドメイン (domain)
function url2domain(url,
num_url, arr_url,
sub_domain, num_sub_domain, arr_sub_domain, domain) {
num_url = split(url, arr_url, /\//);
# "//" があれば、その後をサブドメインとし、
# それ以外は最初がサブドメインとする
if (arr_url[2] == "") {
sub_domain = arr_url[3];
} else {
sub_domain = arr_url[1];
}
num_sub_domain = split(sub_domain, arr_sub_domain, /\./);
# "co.jp" のようなドメインを考える
if (length(arr_sub_domain[num_sub_domain - 1]) <= 2) {
domain = arr_sub_domain[num_sub_domain - 2] "."\
arr_sub_domain[num_sub_domain - 1] "."\
arr_sub_domain[num_sub_domain];
} else {
domain = arr_sub_domain[num_sub_domain - 1] "."\
arr_sub_domain[num_sub_domain];
}
return domain;
}
まず、以下のようなサンプルを用意しました。
$ cat sample.txt http://YYYYYYYYYY.blog64.fc2.com/blog-entry-1.html http://ameblo.jp/XXXXXXXXXX/entry-12121212121.html http://YYYYYYYYYY.blog64.fc2.com/blog-entry-2.html http://d.hatena.ne.jp/kermitonphd/20091001#1254409178 http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_229
ここからドメインを抽出してみます。
$ nawk -f url2domain.awk sample.txt fc2.com ameblo.jp fc2.com hatena.ne.jp no-ip.org
それが実在のドメインなのかどうかを調べてからお使いください。




