Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 比较两个txt文件_Perl_List_File - Fatal编程技术网

Perl 比较两个txt文件

Perl 比较两个txt文件,perl,list,file,Perl,List,File,我是Perl新手。我有两个文本文件,我需要检查两个列表上的匹配字符串 例如,匹配字符串包括: line - file 1: fe/bla/blablabla/abcdefg 有一根火柴 此外,两个文件上匹配字符串的位置(行号)也不相同 我尝试将列表放入数组中,并将数组与嵌套循环进行比较,但程序的运行时间非常长(列表包含数千行),我相信还有另一种方法,不那么幼稚,更高效 这是我将数据放入数组的方式: my $list1 = /path/to/the/file; open (FILE , '&

我是Perl新手。我有两个文本文件,我需要检查两个列表上的匹配字符串

例如,匹配字符串包括:

line - file 1: fe/bla/blablabla/abcdefg

有一根火柴

此外,两个文件上匹配字符串的位置(行号)也不相同

我尝试将列表放入数组中,并将数组与嵌套循环进行比较,但程序的运行时间非常长(列表包含数千行),我相信还有另一种方法,不那么幼稚,更高效

这是我将数据放入数组的方式:

my $list1 = /path/to/the/file;

open (FILE , '<' , $list1) or die ("Could not open the file");
while ( my $line = <FILE> ) {
  chomp ($line);
  $list_1[$i] = $line;
  $i = $i+1;
}
close FILE;
my$list1=/path/to/the/file;

打开(文件,只要
file2
不是很大,最简单的方法就是从其内容构建正则表达式模式,并对照模式检查
file1
中的每一行

您没有说明需要什么输出,因此我在
file1
中打印了所有在
file2
中匹配的行

use strict;
use warnings;
use 5.010;
use autodie;

my ($list1, $list2) = qw( /path/to/list1 /path/to/list2 );

open my $fh, '<', $list2;
my $re = join '|', map { chomp; quotemeta; } <$fh>;
$re = qr/$re/;

open $fh, '<', $list2;
while ( <$fh> ) {
  print if /$re/;
}
使用严格;
使用警告;
使用5.010;
使用自动模具;
my($list1,$list2)=qw(/path/to/list1/path/to/list2);

打开我的$fh,'到目前为止你得到了什么?你遇到了什么问题?对于查找重复项,perl中的作业工具是一个
散列
。你说你已经尝试将列表放入数组中-你能将此添加到问题中吗?我编辑我的问题…我遇到的问题是运行时间太长。添加一些带有和的示例没有匹配项。请确保格式正确。解释确切匹配的内容和原因。@or89:不客气。它在合理的时间内运行吗?
for ( $k = 0 ; $k < @list_1 ; $k = $k+1 ) {
  for ($i = 0 ; $i < @list_2 ; $i = $i+1 ) {
    if (index($list_1[$k] , $list_2[$i]) != -1) {
      splice (@list_2 , $i , 1);
      last;
    }
  } 
}
use strict;
use warnings;
use 5.010;
use autodie;

my ($list1, $list2) = qw( /path/to/list1 /path/to/list2 );

open my $fh, '<', $list2;
my $re = join '|', map { chomp; quotemeta; } <$fh>;
$re = qr/$re/;

open $fh, '<', $list2;
while ( <$fh> ) {
  print if /$re/;
}