基本的な使い方は、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年が最後のリリース。古っ。