在Perl中获取file2中没有出现的所有行的最快方法是什么?

在Perl中获取file2中没有出现的所有行的最快方法是什么?,第1张

概述我有两个(非常大的)文本文件.在运行时方面,最快的方法是创建第三个文件,其中包含未出现在file2中的所有file1行? 所以如果file1包含: Sally Joe Tom Suzie 而file2包含: Sally Suzie Harry Tom 然后输出文件应包含: Joe 创建一个包含文件2中每一行的hashmap.然后,对于文件1中的每一行,如果它不在 我有两个(非常大的)文本文件.在运行时方面,最快的方法是创建第三个文件,其中包含未出现在file2中的所有file1行?

所以如果file1包含:

Sally  Joe  Tom  SuzIE

而file2包含:

Sally  SuzIE  Harry  Tom

然后输出文件应包含:

Joe
解决方法 创建一个包含文件2中每一行的hashmap.然后,对于文件1中的每一行,如果它不在hashmap中,则输出它.这将是O(N),这是您可以实现的最佳效率等级,因为您必须阅读输入.

Perl实现:

#!/usr/bin/env perluse warnings;use strict;use Carp ();my $file1 = 'file1.txt';my $file2 = 'file2.txt';my %map;{    open my $in,'<',$file2 or Carp::croak("Cant open $file2");    while (<$in>) {      $map{$_} = 1;    }    close($in) or Carp::carp("error closing $file2");}{   open my $in,$file1 or Carp::croak("Cant open $file1");   while (<$in>) {    if (!$map{$_}) {      print $_;    }   }   close $in or Carp::carp("error closing $file1");}

如果文件2太大以至于hashmap不适合内存,那么我们手头就有了不同的问题.然后可能的解决方案是在文件2的块上使用上述解决方案(小到足以装入内存),将结果输出到临时文件.如果文件1和文件2之间有足够的匹配,那么总输出应该是合理的大小.为了计算最终结果,我们在临时文件中执行行的交集,即,对于在最终结果中的行,它必须在每个临时文件中出现.

总结

以上是内存溢出为你收集整理的在Perl中获取file2中没有出现的所有行的最快方法是什么?全部内容,希望文章能够帮你解决在Perl中获取file2中没有出现的所有行的最快方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1269246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存