将文本文件中的每个术语与目录中的所有文本文件进行匹配

时间:2013-07-09 20:45:31

标签: search awk

我有一个awk生成的术语列表,terms.txt。我需要搜索一个包含1000个小xml文件的目录,以便与terms.txt中的任何术语完全匹配。我需要生成第二个列表matches.txt,其中包含每个匹配的文件名和术语。

可以用awk做到这一点吗?我想如果我使用awk重新格式化列表,如下所示:    “字词1 |词条2 | TERM3 | ...” ...也许我可以使用变量(VariableName)来表示重新格式化的列表字符串,然后使用它来匹配术语:

awk "/VariableName/{ print FILENAME \": \" $0;}" C:\directory\*.txt > matches.txt

是否可以在awk中创建和使用这样的变量?如果没有,awk中有更好的方法吗?也许这个列表可以一次输入并与目录匹配一次?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

GNU代码

awk -f prog.awk terms.txt "C:\directory\*.txt"


NR==FNR {t[$0]; next}
{
    for (x in t) {
        p="\\<"x"\\>"
        if (match ($0, p ))
            {
            f[FILENAME]
            m[FILENAME,x]++
            }
        }
}

END {
    for (a in f)
        {
        printf("\n%s", a)
        for (b in t)
            {
            if (m[a,b]) {printf("|%s", b)}
            }
        }
}

word boundaries匹配。

答案 1 :(得分:1)

您可以使用执行此操作,但有一个简单的解决方案:

 
grep -f terms.txt directory/*xml -o