#!/usr/bin/perl -w use strict; use File::Spec; my $spec_text = qr/Smt22/; my $path_tmp = $0; (my $volume,my $directories,my $file) = File::Spec->splitpath( $path_tmp ); my $path = $volume . $directories; opendir (DIRREN, $path) || die ; my @RENDIR = readdir (DIRREN); close (DIRREN); my $match_file = "MSISDN.txt"; my @matches=(); # open file and load into array open(my $match_in, '<', $match_file) or die("open failed: $!"); my @matches_in = <$match_in>; close($match_in); foreach my $file (@RENDIR) { if ($file =~ $spec_text){ open(my $fh_in, '<', $file) or die("open failed: $!"); my @lines = <$fh_in>; close($fh_in); foreach my $lines (@lines) { foreach my $matches_in (@matches_in) { my @matche = split(',',$matches_in); my $matchtmp = qr/$matche[1].*(Returned error code 52|Returned error code 50|Returned error code 79|Returned error code 22|Returned error code 24)/; if($lines =~ qr/$matchtmp/) { push @matches, $lines; }}}}} undef(@matches_in); my @newmatch = (); my @tmplist = (); #split logfile line into needs and put together everything ;D foreach my $match (@matches) { chomp $match; @newmatch = split(';',$match); my @tmpnewmatch = split(',',$newmatch[6]); #cuts the blanks @ beginning and end of each string element $newmatch[5] =~ s/^\s+//; $tmpnewmatch[0] =~ s/^\s+//; push @tmplist, $newmatch[5] . ";" . $tmpnewmatch[0]; } # removes duplicates and print out MD Del list my @list= do { my %seen; grep !$seen{$_}++, @tmplist }; undef(@matches); undef(@newmatch); undef(@tmplist); open(INFILE, '<', "MSISDN.txt") or die("open failed: $!"); open(MDDELOUT, '>', "MD_delete_list.txt") or die("open failed: $!"); while () { my @mdmsisdn = split(',',$_); $mdmsisdn[1] =~ s/^\s+//; foreach my $mddel (@list) { my @newmddel = split(';',$mddel); if ($newmddel[0]==$mdmsisdn[1]) { print MDDELOUT "$mdmsisdn[0] ; $mddel \n"; }}} close(INFILE); close(MDDELOUT); #put the list into an array to easyly search for msisdn, will pe put in different hashes one for each errorcode my %adv22=(); my %adv24=(); my %adv50=(); my %adv52=(); my %adv79=(); foreach my $list (@list) { (my $msisdn,my $adverror)= split(';',$list); if ($adverror eq "ADV: Returned error code 22") { $adv22{$msisdn}=$adverror; } elsif ($adverror eq "ADV: Returned error code 24") { $adv24{$msisdn}=$adverror; } elsif ($adverror eq "ADV: Returned error code 50") { $adv50{$msisdn}=$adverror; } elsif ($adverror eq "ADV: Returned error code 52") { $adv52{$msisdn}=$adverror; } elsif ($adverror eq "ADV: Returned error code 79") { $adv79{$msisdn}=$adverror; } else { print "no ADV Errors ;D" } } undef(@list); #open errorfiles and check if msisdn is already known then sorting to existing or not open(my $exmsisdn79, '<', "adv79.txt") or die("open failed: $!"); my @exerrors79 = <$exmsisdn79>; close($exmsisdn79); my @tmpnew79=(); my @tmpold79=(); foreach my $adv79key (keys %adv79) { if ( grep { $adv79key == $_ } @exerrors79 ) { print "$adv79key is an old error\n"; push @tmpold79, $adv79key . "\n"; } else { print "$adv79key is a new error\n"; push @tmpnew79, $adv79key . "\n"; }} open(my $exmsisdn52, '<', "adv52.txt") or die("open failed: $!"); my @exerrors52 = <$exmsisdn52>; close($exmsisdn52); my @tmpnew52=(); my @tmpold52=(); foreach my $adv52key (keys %adv52) { if ( grep { $adv52key == $_ } @exerrors52 ) { print "$adv52key is an old error\n"; push @tmpold52, $adv52key . "\n"; } else { print "$adv52key is a new error\n"; push @tmpnew52, $adv52key . "\n"; }} open(my $exmsisdn50, '<', "adv50.txt") or die("open failed: $!"); my @exerrors50 = <$exmsisdn50>; close($exmsisdn50); my @tmpnew50=(); my @tmpold50=(); foreach my $adv50key (keys %adv50) { if ( grep { $adv50key == $_ } @exerrors50 ) { print "$adv50key is an old error\n"; push @tmpold50, $adv50key . "\n"; } else { print "$adv50key is a new error\n"; push @tmpnew50, $adv50key . "\n"; }} open(my $exmsisdn24, '<', "adv24.txt") or die("open failed: $!"); my @exerrors24 = <$exmsisdn24>; close($exmsisdn24); my @tmpnew24=(); my @tmpold24=(); foreach my $adv24key (keys %adv24) { if ( grep { $adv24key == $_ } @exerrors24 ) { print "$adv24key is an old error\n"; push @tmpold24, $adv24key . "\n"; } else { print "$adv24key is a new error\n"; push @tmpnew24, $adv24key . "\n"; }} open(my $exmsisdn22, '<', "adv22.txt") or die("open failed: $!"); my @exerrors22 = <$exmsisdn22>; close($exmsisdn22); my @tmpnew22=(); my @tmpold22=(); foreach my $adv22key (keys %adv22) { if ( grep { $adv22key == $_ } @exerrors22 ) { print "$adv22key is an old error\n"; push @tmpold22, $adv22key . "\n"; } else { print "$adv22key is a new error\n"; push @tmpnew22, $adv22key . "\n"; }} #put new errors in arry to existing errors dupe check it and write back to file foreach my $tmpexout79 (@tmpnew79) { push @exerrors79,$tmpexout79; } my @newexout79= do { my %seen79; grep !$seen79{$_}++, @exerrors79 }; undef(@exerrors79); foreach my $tmpexout52 (@tmpnew52) { push @exerrors52,$tmpexout52; } my @newexout52= do { my %seen52; grep !$seen52{$_}++, @exerrors52 }; undef(@exerrors52); foreach my $tmpexout50 (@tmpnew50) { push @exerrors50,$tmpexout50; } my @newexout50= do { my %seen50; grep !$seen50{$_}++, @exerrors50 }; undef(@exerrors50); foreach my $tmpexout24 (@tmpnew24) { push @exerrors24,$tmpexout24; } my @newexout24= do { my %seen24; grep !$seen24{$_}++, @exerrors24 }; undef(@exerrors24); foreach my $tmpexout22 (@tmpnew22) { push @exerrors22,$tmpexout22; } my @newexout22= do { my %seen22; grep !$seen22{$_}++, @exerrors22 }; undef(@exerrors22); open(OUT22, '>', "adv22.txt") or die("open failed: $!"); foreach my $newout22 (@newexout22) { print OUT22 $newout22; } undef(@newexout22); open(OUT24, '>', "adv24.txt") or die("open failed: $!"); foreach my $newout24 (@newexout24) { print OUT24 $newout24; } undef(@newexout24); open(OUT50, '>', "adv50.txt") or die("open failed: $!"); foreach my $newout50 (@newexout50) { print OUT50 $newout50; } undef(@newexout50); open(OUT52, '>', "adv52.txt") or die("open failed: $!"); foreach my $newout52 (@newexout52) { print OUT52 $newout52; } undef(@newexout52); open(OUT79, '>', "adv79.txt") or die("open failed: $!"); foreach my $newout79 (@newexout79) { print OUT79 $newout79; } undef(@newexout79); #printing out final records to mail ;D open(OUTMAIL22, '>', "adv22_mail.txt") or die("open failed: $!"); print OUTMAIL22 "Here goes the text needed befor MSISDN \n NEW MSISDNs\n\n"; foreach my $mail22 (@tmpnew22) { print OUTMAIL22 "$mail22"; } print OUTMAIL22 "\n EXISTING MSISDNs\n"; foreach my $mailold22 (@tmpold22) { print OUTMAIL22 "$mailold22"; } close(OUTMAIL22); undef(@tmpold22); undef(@tmpnew22); open(OUTMAIL24, '>', "adv24_mail.txt") or die("open failed: $!"); print OUTMAIL24 "Here goes the text needed befor MSISDN \n NEW MSISDNs\n\n"; foreach my $mail24 (@tmpnew24) { print OUTMAIL24 "$mail24"; } print OUTMAIL24 "\n EXISTING MSISDNs\n"; foreach my $mailold24 (@tmpold24) { print OUTMAIL24 "$mailold24"; } close(OUTMAIL24); undef(@tmpold24); undef(@tmpnew24); open(OUTMAIL50, '>', "adv50_mail.txt") or die("open failed: $!"); print OUTMAIL50 "Here goes the text needed befor MSISDN \n NEW MSISDNs\n\n"; foreach my $mail50 (@tmpnew50) { print OUTMAIL50 "$mail50"; } print OUTMAIL50 "\n EXISTING MSISDNs\n"; foreach my $mailold50 (@tmpold50) { print OUTMAIL50 "$mailold50"; } close(OUTMAIL50); undef(@tmpold50); undef(@tmpnew50); open(OUTMAIL52, '>', "adv52_mail.txt") or die("open failed: $!"); print OUTMAIL52 "Here goes the text needed befor MSISDN \n NEW MSISDNs\n\n"; foreach my $mail52 (@tmpnew52) { print OUTMAIL52 "$mail52"; } print OUTMAIL52 "\n EXISTING MSISDNs\n"; foreach my $mailold52 (@tmpold52) { print OUTMAIL52 "$mailold52"; } close(OUTMAIL52); undef(@tmpold52); undef(@tmpnew52); open(OUTMAIL79, '>', "adv79_mail.txt") or die("open failed: $!"); print OUTMAIL79 "Here goes the text needed befor MSISDN \n NEW MSISDNs\n\n"; foreach my $mail79 (@tmpnew79) { print OUTMAIL79 "$mail79"; } print OUTMAIL79 "\n EXISTING MSISDNs\n"; foreach my $mailold79 (@tmpold79) { print OUTMAIL79 "$mailold79"; } close(OUTMAIL79); undef(@tmpold79); undef(@tmpnew79);