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