作者: 藤岡和夫
日時: 2007/10/16(23:37)
On Tue, 16 Oct 2007 21:08:54 +0900
davi <davi-1984@...> さんwrote:

> ところで、AWKでagrepみたいな「x文字違い検索」ってできません?
> 
> 「ハンカチ王子」で2文字違いまで許容、って指定だと、
> 「ハニカミ王子」は当然のこととして、
> 
> ハゲカケ王子
> ハナカミ王子
> ハミガキ王子
> ハイカイ王子
> ハダカノ王子
> ハルカゼ王子
> トンカツ王子
> 
> などにヒット、みたいな…。
> 
> オートマトンとか言われてもよくわからんのですけど。

 オートマトンというよりは単に文字列の比較なんですけどね。文字列の先頭か
ら比較する。カとガは区別します。AWKでも同様なアイデアで書けると思います
が・・・AWKではsplitで空文字列で文字列を文字単位で分割できなかったかな。

-----^ agrep.pl
# usage: jperl agrep.pl 2 ハンカチ王子
$misn = shift @ARGV;
$pattern = shift @ARGV;
@chars = split("",$pattern);
while(<DATA>){
	chomp;
	@charsin = split("",$_);
	for($i=0; $i<=$#chars; $i++){
		if($chars[$i] ne $charsin[$i]){
			$mismatch++;
		}
	}
	if($mismatch <= $misn){
		print $_,"\n";
	}
	$mismatch = 0;
}
__DATA__
ハニカミ王子
ハゲカケ王子
ハナカミ王子
ハミガキ王子
ハイカイ王子
ハダカノ王子
ハルカゼ王子
トンカツ王子
-----$

藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html