如何使用perl

时间:2016-10-08 15:14:13

标签: perl

我尝试从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

1 个答案:

答案 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