我有一个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中有更好的方法吗?也许这个列表可以一次输入并与目录匹配一次?
任何帮助都将不胜感激。
答案 0 :(得分:2)
GNU代码awk:
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)