确定可以在哪些文件中找到哪些关键字

时间:2013-12-01 00:13:28

标签: linux grep text-files text-mining

问题

假设我有一个包含单词列表的文本文件。每个单词都出现在一个单独的行上。我们以下面的例子为例,我们称之为“my_dictionary_file”:

my_dictionary_file.txt

Bill
Henry
Martha
Sally
Alex
Paul

在我当前的目录中,我有几个包含上述名称的文件。问题是我不知道哪些文件包含哪些名称。这是我想要找到的;一种匹配的游戏。换句话说,我想将my_dictionary_file.txt中的每个名称与名称所在的文件匹配。

举个例子,假设我工作目录中的文件如下所示:

FILE1.TXT

There is a man called Bill. He is tall.

FILE2.TXT

There is a girl called Martha. She is small.

file3.txt

Henry and Sally are a couple.

file4.txt

Alex and Paul are two bachelors.

我尝试了什么

首先。使用带有-o和-f选项的fgrep命令,

$ fgrep -of my_dictionary_file.txt file1.txt
Bill

我可以确定名称Bill可以在file1.txt中找到。

第二。使用带有-r -l和-f选项的fgrep命令,

$ fgrep -rlf names.txt .
./names.txt
./file1.txt
./file4.txt
./file3.txt
./file2.txt

我可以搜索当前目录中的所有文件,以查明文件是否包含my_dictionary_file.txt中的名称列表


广受欢迎的解决方案

我正在寻找的解决方案将结合上述两种尝试的结合。更明确一点,我想知道:

Bill belongs to file1.txt
Martha belongs to file2.txt
Henry and Sally belong to file3.txt
Alex and Paul belong to file4.txt

对fgrep以外的命令的任何建议或指示都将不胜感激!


注意

我想解决的实际问题是这个简化示例的扩展版本。我希望将答案建立在对这个问题的回答上,所以请记住,实际上字典文件包含数百个名称,并且当前目录中有一百个或更多文件。

打字

$ fgrep -of my_dictionary_file.txt file1.txt
Bill

$ fgrep -of my_dictionary_file.txt file2.txt
Martha

$ fgrep -of my_dictionary_file.txt file3.txt
Henry Sally

$ fgrep -of my_dictionary_file.txt file4.txt
Alex Paul

当然可以告诉我结果,但我正在寻找一种有效的方法来收集结果 - 也许,将结果传递给单个.txt文件。

1 个答案:

答案 0 :(得分:1)

如果使用-o选项一次fgrep所有文件,fgrep应该打印文件名和匹配的文本:

$ fgrep -of dict.txt file*.txt
file1.txt:Bill
file2.txt:Martha
file3.txt:Henry
file3.txt:Sally
file4.txt:Alex
file4.txt:Paul