【发布时间】:2011-04-04 23:18:22
【问题描述】:
我有几个看起来像这样的文本文件(A.txt 和 B.txt)(每个可能有 ~10000 行)
processa,id1=123,id2=5321
processa,id1=432,id2=3721
processa,id1=3,id2=521
processb,id1=9822,id2=521
processa,id1=213,id2=1
processc,id1=822,id2=521
我需要检查文件A.txt 中的每一行是否也存在于B.txt 中(B.txt 可能还有更多,这没关系)。
问题是两个文件中的行可以按任何顺序排列,所以我想我会在O(nlogn) 中的两个文件中按特定顺序对它们进行排序,然后将A.txt 中的每一行匹配到下一行B.txt 中的行 O(n)。我可以实现一个哈希,但是文件很大,并且这种比较只发生一次,之后这些文件被重新生成,所以我认为这不是一个好主意。
在 Perl 中对文件进行排序的最佳方法是什么?任何排序都可以,只需要 一些 排序。
例如,在字典排序中,这将是
processa,id1=123,id2=5321
processa,id1=213,id2=1
processa,id1=3,id2=521
processa,id1=432,id2=3721
processb,id1=9822,id2=521
processc,id1=822,id2=521
正如我之前提到的,任何排序都可以,只要 Perl 做的很快。
我想在 Perl 代码中这样做,像这样打开文件后
open (FH, "<A.txt");
任何 cmets、想法等都会有所帮助。
【问题讨论】:
-
如果您正在处理 10,000 行,并且您打算多次使用它——至少我会使用 SQL Lite。
-
哈希和排序都要求您将整个
A.txt文件加载到内存中。为什么你认为排序比使用哈希更好? -
@mobrule:我认为 Perl 可能有一些智能的排序方式,因为它是一种为处理文本而构建的语言。某种方式比自己实现哈希更好。从下面的答案看来,散列毕竟是个好主意!
-
只要你能在内存中处理它就可以了。