在两个文本文件中查找相同的单词

问题描述:

我有两个文本文件,每个文件包含超过50 000行。我需要找到两个文本文件中的相同单词。我尝试COMM命令,但我得到的答案是“文件2不是按排序顺序”。我试图通过命令SORT对文件进行排序,但它不起作用。我在Windows上工作。它不必在命令行中解决。它可以在一些程序或其他东西中解决。感谢您的每一个想法。在两个文本文件中查找相同的单词

+1

告诉你更多关于你的文字。每行一个字?或CSV?或者是什么?举一些例子会很好 – Kent 2013-05-04 22:03:48

+0

第一个文本文件包含一个单词,每行包含字符#,&或*。第二个文件包含一个单词和每行数字。 – user1844845 2013-05-04 22:10:54

如果您想排序文件,您将不得不使用某种外部排序(如合并排序),以便您拥有足够的内存。至于另一种方式,你可以通过第一个文件并找到所有单词并将它们存储在散列表中,然后检查第二个文件并检查重复的单词。如果这些单词是真实的单词而不是乱码,那么第二种方法将起作用并且更容易。由于文件太大,你可能不想使用脚本语言,但它可能工作。

+1

50k线并不大。如果一条线的长度正常。在内存中进行处理也可以。 – Kent 2013-05-04 22:12:12

+0

无论你说什么肯特,因为他提到了文件中的行数,我认为这可能是他的问题,这就是所有 – aaronman 2013-05-04 22:13:59

如果单词不在自己的行,那么comm不能帮你。

如果你有一组UNIX工具得心应手,像Cygwin的,(你提到的通讯,所以你可能有其他人也),你可以这样做:

$ tr -cs "[:alpha:]" "\n" < firstFile | sort > firstFileWords 
$ tr -cs "[:alpha:]" "\n" < secondFile | sort > secondFileWords 
$ comm -12 firstFileWords secondFileWords > commonWords 

前两行转换词语每个文件在每一行中包含一个单词,并对文件进行排序。

如果你只在个别词有兴趣,你可以改变sortsort -u使获得独特的一套。