假设我有一个包含单词列表的文本文件。每个单词都出现在一个单独的行上。我们以下面的例子为例,我们称之为“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文件。
答案 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