回显找到的关键字

回显找到的关键字

我试图找出在下面的脚本中为[每个]文件找到了哪些关键字。我尝试添加 echo $keywords 它只输出每个关键字。

代码:

keywords=("Alachua" "ALACHUA" "alachua" "Archer" "Gainesville" "Hawthorne" "High Springs" "Newberry" "Waldo" "LaCrosse" "PA-LOCKA" "PALMETTO BAY" "PINECREST" "34997")
IFS=$'\n'
find . -size +1c -type f ! -exec grep -qwF "${keywords[*]}" {} \; -exec truncate -s 0 {} \;   

更新:

我的问题是我的关键字比本示例中的关键字多得多,并且我不确定每个文件中都找到了哪些关键字,我需要将其从 $keywords 中删除,因为它会弄乱我的结果。

答案1

有几个问题:

  1. 你混淆"${keywords[*]}""${keywords[@]}"。前者扩展为争论。

  2. -q抑制任何输出。

  3. 如果您有多个模式,则无法将它们作为参数列表传递。你需要的-e pattern1 -e pattern2是。或者您必须将它们传递到一个文件中(请参阅 参考资料-f)。

我想awk在这种情况下更有意义。

这可能有用:

awk -v patternfile=pattern \
'BEGINFILE {i=0; while(getline var <patternfile) {pattern[i]=var;i++}; '\
'no_patterns=i; close(patternfile)}; '\
'FNR == 1 {print ""; print "file: " FILENAME;}; '\
'{for (i in pattern) { if($0 ~ pattern[i]) {print pattern[i]; delete pattern[i]};}}' \
file file2

相关内容