gpt4 book ai didi

perl - 如何在 Perl 中对文本文件中的行进行排序?

转载 作者:行者123 更新时间:2023-12-01 16:03:27 25 4
gpt4 key购买 nike

我有几个文本文件(A.txtB.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");

任何评论、想法等都会有帮助。

最佳答案

要对脚本中的文件进行排序,您仍然需要将整个文件加载到内存中。如果您这样做,我不确定对它进行排序与​​仅将其加载到哈希中相比有什么优势?

像这样的东西会起作用:

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;

关于perl - 如何在 Perl 中对文本文件中的行进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3587195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com