On Wed, 17 Oct 2007 17:40:39 +0900 (JST)
kbk@... (Bruce.) さんwrote:
> ずいぶんとご無沙汰だったような気がしますが。
ご無沙汰しました^^;
実はBecky!のスパムフィルタに邪魔されていました^^;;;というのが半分は本
当ですね。
> > オートマトンというよりは単に文字列の比較なんですけどね。文字列の先頭か
> > ら比較する。カとガは区別します。AWKでも同様なアイデアで書けると思います
> > が・・・AWKではsplitで空文字列で文字列を文字単位で分割できなかったかな。
>
> よほど古いのでなければ文字単位の分割になります。
> #POSIXでそういう規則になったから
なるほど、jgawkでは動かないけど、gawkは動きました^^)v
-----^ agrep.awk
# usage: gawk -f agrep.awk 2 ハンカチ王子 agrep.txt
BEGIN{
misn = ARGV[1]
pattern = ARGV[2]
split(pattern, chars, "")
while(getline s < ARGV[3]){
split(s, charsin, "")
for (i in chars){
if(chars[i] != charsin[i]){
mismatch++
}
}
if(mismatch <= misn){
print s;
}
mismatch = 0;
}
}
-----$
-----^ agrep.txt
ハニカミ王子
ハゲカケ王子
ハナカミ王子
ハミガキ王子
ハイカイ王子
ハダカノ王子
ハルカゼ王子
トンカツ王子
-----$
このようなデータ依存の初歩的なスクリプトではなく、文中にあるようなテキ
ストから一般的に抽出したいなら、スクリプト自体を生成して、evalみたいなこ
とをすれば可能でしょうね。まず/..カチ王子/,/.ン.チ王子/,...みたいなパター
ンを元の検索文字からすべて生成して、どれにでもマッチするようなループを生
成するというような感じ。このように複雑なことをやるならPerlのほうが適して
いると思います。
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html