2013-07-09 69 views
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中有更好的方法嗎?也許這個列表可以一次一個字符地輸入和匹配目錄?

任何幫助,將不勝感激。

+0

你的'terms.txt'和'xml'文件是怎麼樣的?你可以發佈一個小樣本嗎? –

回答

1

你可以用做到這一點,但有簡單的解決方案

grep -f terms.txt directory/*xml -o 
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

相關問題