Bash 遍历文件末尾

Bash Loop Through End of File

我正在编写脚本,该脚本将从一个关键字和单独文件中的其他关键字列表中找到一个模式。

File1 有列表,每行一个单词。 File2 有另一个列表——我真正想搜索的列表。

while read LINE; do
  grep -q $LINE file2
  if [ $? -eq 0 ]; then
    echo "Found $LINE in file2."
    grep $LINE file2 | grep example
    if [ $? -eq 0 ]; then
      echo "Keeping $LINE"
    else
      echo "Deleting $LINE"
      sed -i "/$LINE/d" file2
    fi
  else
    echo "Did not find $LINE in file2."
  fi
done < file1

我想要的是从 file1 中取出每个单词并在 file2 中搜索它的每个实例。从这些实例中,我想搜索包含单词 example 的所有实例。任何不包含示例的实例,我想删除它们。

我的代码,它从 file1 中获取一个单词并在 file2 中搜索它的一个实例。一旦它找到那个实例,循环就会移动到 file1 中的下一个单词,此时它应该继续在 file2 中搜索前一个单词;它应该只在完成对当前单词的文件 2 搜索后移动到下一个文件 1 单词。

关于如何实现这个的任何帮助?

建议 awk 脚本,每个文件只扫描一次。

 awk 'FRN == RN {wordsArr[++wordsCount] = [=10=]}  # read file1 lines into array
      FRN != RN && /example/ {                 # read file2 line matching regExp /example/
        for (i in wordsArr) {             # scan all words in array
           if ([=10=] ~ wordsArr[i]) {        # if a word matched in current line
              print;                      # print the current line
              next;                       # skip rest of words,read next line
           }
        }
      }' file1 file2