查找具有共同词的文件

查找具有共同词的文件

创建与给定文件具有共同单词的文件列表的最佳方法是什么。例如,如果我有:

$ ls
  mainFile  file1  file2  file file4
$ cat mainFile
  exquisite malicious sentient pulsating
  perspicacious one
  tawdry fumigate Baryshnikov O'connor

我想列出 中cwd包含 中任何一个单词的任何文件mainFile。解决这个问题的最佳方法是什么?

由于每行的字数mainFile不是恒定的,因此我使用cut一些技巧来寻找解决方案。我试图用单词创建一个字符串,然后将它们放在命令|中分隔开grep -l "exquisite|malicious|etc" *。我对任何方法都持开放态度,尽管这可能会更好。

答案1

首先为mainFile生成索引,

sed 's/ /\n/g' mainFile | sort | uniq > mainFile.idx

然后对固定字符串执行 grep:

grep -F -f mainFile.idx file*

答案2

如果您grep支持非标准-w选项(用于匹配单词):

grep -lwFe "$(tr -cs "[[:alnum:]_'-]" '[\n*]' < mainfile | sort -u)" file*

答案3

使用此代码:

    for pattern in `cat mainfile`
    do
    grep -l "$pattern" file*
    done

阿润

相关内容