Laz*_*zer 3 sorting scripting perl
我有几个文本文件(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
Run Code Online (Sandbox Code Playgroud)
我需要检查文件中的每一行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
Run Code Online (Sandbox Code Playgroud)
正如我之前提到的,只要Perl做得很快,任何排序都会一样好.
我想在打开文件之后从Perl代码中执行此操作
open (FH, "<A.txt");
Run Code Online (Sandbox Code Playgroud)
任何评论,想法等都会有所帮助.
要对脚本中的文件进行排序,您仍然需要将整个内容加载到内存中.如果你这样做,我不确定排序它的好处是什么只是加载到哈希?
像这样的东西会起作用:
my %seen;
open(A, "<A.txt") or die "Can't read A: $!";
while (<A>) {
$seen{$_}=1;
}
close A;
open(B, "<B.txt") or die "Can't read B: $!";
while(<B>) {
delete $seen{$_};
}
close B;
print "Lines found in A, missing in B:\n";
join "\n", keys %seen;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6424 次 |
| 最近记录: |