我尝试从2个文件中打印出匹配的模式,这些模式具有几乎相同的数据但略有不同。 [下面是示例文件] [1]
File 1
Orig : 109 ABCDEFG1
Orig : 119 ORANGECOLOUR
File 2
Clone : 108 abcd_efg_1
Clone : 113 orange_colour
Ouput expected
Orig : 109 ABCDEFG1
Clone : 108 abcd_efg_1
Orig : 119 ORANGECOLOUR
Clone : 113 orange_colour
因此,基于上面的例子,不同于2的文件只是大写/小写,并得到一些额外的字符“_”。那么如何使用perl
将匹配的数据打印到第三个文件中
open FILE1,'<FILE1' or die $!;
open FILE2,'<FILE2' or die $!;
open FILE3, '>Output' or die $!;
my @array3 = <FILE1>;
my @array4 = <FILE2;
foreach $x (@array3) { if($x =~ /(\S+) (\d+) (\S+)/) { $temp_data = $3;
foreach $y (@array4) { if($y =~ /\b$temp_data\b/i) {print FILE3 "$x$y\n";}}
}}
close FILE1;
close FILE2;
close FILE3;
以上是我所做的剧本。当我使用这个脚本时,它只打印出完全匹配的模式而不考虑大小写。 .Below是我使用该代码时的输出
Output file
Orig : Bluecolour
Clone : Bluecolour
Orig : Greycolour1
clone : Greycolour1
答案 0 :(得分:0)
如果提供的文件和条件已完成,则可以使用以下文件
open F1, 'f1.txt';
open F2, 'f2.txt';
my @f2 = <F2>;
foreach my $string1 (<F1>) {
chomp($string1);
my ($pattern1) = $string1 =~ m/(\S+)$/;
foreach my $string2 (@f2) {
chomp($string2);
($_) = $string2 =~ m/(\S+)$/;
s/[^a-z0-9]//ig;
print $string1 . "\n" . $string2 . "\n" if ($pattern1 =~ /^$_$/i);
}
}
输出:
Orig : ABCDEFG1
Clone : abcd_efg_1
Orig : ORANGECOLOUR
Clone : orange_colour
<强> UPD:强> 你已经在输入文件中添加了数字,脚本仍然有效,无需修改
outpus:
Orig : 109 ABCDEFG1
Clone : 108 abcd_efg_1
Orig : 119 ORANGECOLOUR
Clone : 113 orange_colour