0

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

可以使用 awk 来执行此操作吗?我在想,如果我使用 awk 像这样重新格式化列表:“term1|term2|term3|...” ...也许我可以使用变量 (VariableName) 来表示重新格式化的列表字符串,然后使用此匹配条款:

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

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

任何帮助,将不胜感激。

4

2 回答 2

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.

于 2013-07-09T23:45:58.707 回答
1

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

grep -f terms.txt directory/*xml -o
于 2013-07-09T20:50:05.070 回答