Dictionary 两个大单词列表的交集

Dictionary 两个大单词列表的交集,dictionary,grep,intersection,Dictionary,Grep,Intersection,我有两个单词列表(180k和260k),我想生成第三个文件,它是出现在两个列表中的单词集 这样做的最佳(最有效)方式是什么?我读过一些论坛谈论使用grep,但是我认为单词列表对于这种方法来说太大了。如果两个文件被排序(或者你可以对它们进行排序),你可以使用comm-1-2 file1 file2打印出交叉点。如果两个文件被排序(或者你可以对它们进行排序),您可以使用comm-1-2 file1 file2打印出交叉点。您是对的,grep是个坏主意。键入“man join”并按照说明操作 如果您的

我有两个单词列表(180k和260k),我想生成第三个文件,它是出现在两个列表中的单词集


这样做的最佳(最有效)方式是什么?我读过一些论坛谈论使用grep,但是我认为单词列表对于这种方法来说太大了。

如果两个文件被排序(或者你可以对它们进行排序),你可以使用
comm-1-2 file1 file2
打印出交叉点。

如果两个文件被排序(或者你可以对它们进行排序),您可以使用
comm-1-2 file1 file2
打印出交叉点。

您是对的,grep是个坏主意。键入“man join”并按照说明操作

如果您的文件只是单列中的单词列表,或者至少,如果重要的单词是每行的第一个,那么您需要做的就是:

$ sort -b -o f1 file1
$ sort -b -o f2 file2
$ join f1 f2
否则,您可能需要为join(1)命令提供一些附加说明:

JOIN(1)                   BSD General Commands Manual                  JOIN(1)

NAME
     join -- relational database operator

SYNOPSIS
     join [-a file_number | -v file_number] [-e string] [-o list] [-t char] [-1 field] [-2 field] file1 file2

DESCRIPTION
     The join utility performs an ``equality join'' on the specified files and writes the result to the standard output.  The ``join field'' is the field in each file by which the files are compared.  The
     first field in each line is used by default.  There is one line in the output for each pair of lines in file1 and file2 which have identical join fields.  Each output line consists of the join field,
     the remaining fields from file1 and then the remaining fields from file2.
     . . .
     . . .

你说得对,格雷普是个坏主意。键入“man join”并按照说明操作

如果您的文件只是单列中的单词列表,或者至少,如果重要的单词是每行的第一个,那么您需要做的就是:

$ sort -b -o f1 file1
$ sort -b -o f2 file2
$ join f1 f2
否则,您可能需要为join(1)命令提供一些附加说明:

JOIN(1)                   BSD General Commands Manual                  JOIN(1)

NAME
     join -- relational database operator

SYNOPSIS
     join [-a file_number | -v file_number] [-e string] [-o list] [-t char] [-1 field] [-2 field] file1 file2

DESCRIPTION
     The join utility performs an ``equality join'' on the specified files and writes the result to the standard output.  The ``join field'' is the field in each file by which the files are compared.  The
     first field in each line is used by default.  There is one line in the output for each pair of lines in file1 and file2 which have identical join fields.  Each output line consists of the join field,
     the remaining fields from file1 and then the remaining fields from file2.
     . . .
     . . .

假设每行一个单词,我会使用
grep

grep -xFf seta setb  
  • -x
    匹配整行(无部分匹配)
  • -F
    逐字解释给定模式(无正则表达式)
  • -f seta
    指定要搜索的模式
  • setb
    是搜索
    seta内容的文件
comm
将执行相同的操作,但需要对集合进行预排序:

comm -12 <(sort seta) <(sort setb)

comm-12假设每行一个单词,我会使用
grep

grep -xFf seta setb  
  • -x
    匹配整行(无部分匹配)
  • -F
    逐字解释给定模式(无正则表达式)
  • -f seta
    指定要搜索的模式
  • setb
    是搜索
    seta内容的文件
comm
将执行相同的操作,但需要对集合进行预排序:

comm -12 <(sort seta) <(sort setb)

comm-12
grep-p'[A-Za-z0-9]*'file1 | xargs-0-I{}grep{}file2>file3


我相信这会在file1中查找任何内容,然后检查file1中的内容是否在file2中,并将匹配的内容放入file3。

grep-p'[A-Za-z0-9]*'file1 | xargs-0-I{}grep{}file2>file3


我相信这会在文件1中查找任何内容,然后检查文件1中的内容是否在文件2中,并将匹配的内容放入文件3。

早在我设法找到一个执行类似操作的Perl脚本的时候:


回到以前,我设法找到了一个Perl脚本,它做了类似的事情:


结果是其中一个文件已排序--您能给我一个命令对另一个文件进行排序吗?只需
排序-o outfile infle
,假设另一个文件也按字母顺序排序。不过,要注意地点;特别是,订单是“AaBb”还是“ABab”都可以更改。为了安全起见,您可能希望对这两个文件进行显式排序,以确保使用相同的设置。感谢您的帮助!排序工作正常,但comm仍然警告“comm:文件2未按排序顺序排列”——但它似乎生成了一些内容。这听起来可以吗?早上我会做一些QA:)这个警告可能意味着文件没有按照完全相同的顺序排序;尝试显式地对它们进行排序,然后再次尝试使用
comm
命令。哦,是的,这似乎奏效了。另外,约翰西韦布的grep方法也产生了同样的结果,所以我对此很有信心。再次感谢。结果是其中一个已排序--您能给我一个命令对另一个进行排序吗?只要
排序-o outfile infle
,假设另一个文件也按字母顺序排序。不过,要注意地点;特别是,订单是“AaBb”还是“ABab”都可以更改。为了安全起见,您可能希望对这两个文件进行显式排序,以确保使用相同的设置。感谢您的帮助!排序工作正常,但comm仍然警告“comm:文件2未按排序顺序排列”——但它似乎生成了一些内容。这听起来可以吗?早上我会做一些QA:)这个警告可能意味着文件没有按照完全相同的顺序排序;尝试显式地对它们进行排序,然后再次尝试使用
comm
命令。哦,是的,这似乎奏效了。另外,约翰西韦布的grep方法也产生了同样的结果,所以我对此很有信心。再次感谢。grep-xFf也起到了作用,并且似乎产生了相同的结果(从结果中相同的行数判断)。我认为它比comm方法(当然,正如人们所期望的那样)花费了更长的时间(计算)。谢谢grep-xFf也起到了作用,并且似乎产生了相同的结果(从结果中相等的行数判断)。我认为它比comm方法(当然,正如人们所期望的那样)花费了更长的时间(计算)。谢谢请注意,不鼓励这样做,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移,这些参考文献往往会过时)。请考虑在这里添加一个独立的概要,将链接作为参考。注意,这是令人沮丧的,因此答案应该是搜索解决方案的终点(而不是另一个停留的引用,它会随着时间的推移而变得陈旧)。请考虑在这里添加一个独立的概要,将链接作为参考。