File Vergleich auf best. Pattern

mc_gulasch

Erfahrenes Mitglied
HI,

ich will zwei Files mit massig Einträgen auf Gleichheit überprüfen. Allerdings soll das Programm nicht bei jeder Ungleichheit aufschreien, sondern nur, wenn sich zwei Zeilen ausschließlich in dem Pattern [a-z][0-9][0-9] unterscheiden. Wie ich generell Strings vergleiche ist klar, aber wie ich stückweise die Unterschiede extrahieren kann weiß ich noch nicht. Kann mir da wer helfen?

Danke sagt das Gulasch!
 
Ok, also in etwa so:
File 1
blabla
blav34
blov35
File 2
blabla
blabla
blabla
Die einzige Ausgabe, die ich dann kriegen soll ist die zweite Zeile, da die ersten Zeilen übereinstimmen und die dritte Zeile sich in "ov35" unterscheidet und das ja zwei Kleinbuchstaben und zwei Zahlen sind (gesucht wurde aber das Pattern [a-z][0-9[0-9]).

Ich hoffe, es ist ungefähr klar geworden.
 
Code:
#!/usr/bin/perl

use strict;
use warnings;
use Algorithm::Diff qw(sdiff);
use Data::Dumper;

my @lines = <DATA>;
my (@file1,@file2);

for my $line(@lines){
    chomp $line;
    my ($val1,$val2) = split / /,$line;
    push @file1,$val1;
    push @file2,$val2;
}


# wichtiger part!
my $re      = qr/[a-z][0-9][0-9]/;
my @longest = scalar(@file1) > scalar(@file2) ? @file1 : @file2;

for my $idx(0..scalar(@longest)-1){
    my $diff       = sdiff [split//,$file1[$idx]],[split//,$file2[$idx]];
    my $difference = '';
    my $bool       = 0;
    for my $ref(@$diff){
        next if $ref->[0] eq 'u' and $bool == 0;
	$difference .= $ref->[1];
	$bool = 1;
    }
    
    print $file1[$idx],"\n" if $difference =~ /^$re$/;
}

__DATA__
blabla blabla
blav34 blabla
blov35 blabla

Der Rest ist Deine Aufgabe...
 
Zurück