曖昧検索のagrep

基本的な使い方は、man agrepやUNIXの部屋 コマンド検索:agrep (*BSD/Linux)を見て頂くとして、ここではagrepの曖昧検索の実例をあげたいと思う。

利用したデータは、位置参照情報ダウンロードサービスの全県のデータ。それの「市区町村名」と「大字町丁目名」の属性のみを抽出した。都道府県名は都合により付け加えていない。分かりづらい説明だが、以下のような感じになる。

加美町下新田字小原(未)
加美町下新田字小原前
加美町下新田字小路合
(略)
岸和田市八田町
岸和田市真上町
岸和田市北阪町

252914行。7MB。

さぁ、agrep。

$ agrep -1 東京市新町 address2.txt 
西東京市新町一丁目
西東京市新町二丁目
西東京市新町三丁目
西東京市新町四丁目
西東京市新町五丁目
西東京市新町六丁目

1つまでのエラーを許すよという-1オプション。
ただこれは、SQLの'%東京市新町%'と同じ。

$ agrep -2 東京市新町 address2.txt 
西東京市栄町一丁目
西東京市栄町二丁目
西東京市栄町三丁目
西東京市新町一丁目
西東京市新町二丁目
(略)
西東京市泉町一丁目
西東京市泉町二丁目
(略)
西東京市東町一丁目
西東京市東町二丁目
(略)

2つまでのエラーを許すよという-2オプション。
東京市新町だけではなく、東京市東町なども結果に含まれるようになります。

$ time agrep -B 東京市新町 address2.txt 
西東京市新町一丁目
西東京市新町二丁目
西東京市新町三丁目
西東京市新町四丁目
西東京市新町五丁目
西東京市新町六丁目

real	0m0.019s
user	0m0.004s
sys	0m0.006s

許容エラー数を徐々に上げて、最も近い一致を探す-Bオプション。一番使うことが多そうなオプションでしょうか。

$ time agrep -B -y 五反野 address2.txt 
名古屋市中村区五反城町一丁目
名古屋市中村区五反城町二丁目
名古屋市中村区五反城町三丁目
名古屋市中村区五反城町四丁目
名古屋市中村区五反城町五丁目
名古屋市中村区五反城町六丁目
名古屋市中村区五反城町七丁目
名古屋市中村区五反城町八丁目
名古屋市港区七反野一丁目
名古屋市港区七反野二丁目
京都市西京区川島五反長町

real	0m0.080s
user	0m0.052s
sys	0m0.019s

五反野はデータに含まれていませんが、agrepは、もっとも近いデータを探そうとします。

$ time agrep -y -B 東京町 address2.txt  
常陸太田市東二町
上越市大字東京田
各務原市那加東亜町
四万十市中村京町一丁目
四万十市中村京町二丁目
四万十市中村京町三丁目
四万十市中村京町四丁目
四万十市中村京町五丁目

real	0m0.079s
user	0m0.053s
sys	0m0.015s

ここまで来るとカオス。

ちなみに、1992年が最後のリリース。古っ。