Помогите плиз с конвертацией логов
сейчас имею следующий код:
Код:
#use strict;
use POSIX;
my $exclude;
my $base_path = "/atc";
my $sourcelog_path = "$base_path/csv";
my $destlog_path = "$base_path/source";
process_ats( 1 );
sub process_ats
{
my $ats_num = shift;
my $dir_name = $sourcelog_path;
opendir( DIR, $dir_name )
or die "Can't open dir $dir_name\n";
foreach ( readdir( DIR ) )
{
if( $_ ne "." && $_ ne ".." )
{
my $file_name = $dir_name."/".$_;
print "Processing file $file_name\n";
process_file( $file_name, "$destlog_path/" );
}
}
closedir( DIR );
}
sub process_file
{
my $src_file = shift;
my $dst_dir = shift;
open( FILE, $src_file )
or die "Can't open file $src_file\n";
my %DATA;
LINE: while( <FILE> )
{
if (/^(\w+)\s(\d+)\s(.*)\s(\d{4})\-(\d{2})\-(\d{2})\s(\d{2}):(\d{2}):(\d{2})\s(\d{4})\-(\d{2})\-(\d{2})\s(\d{2}):(\d{2}):(\d{2})\s(\d+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\d+)\s(\d+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(.*)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)\s(\w+)/)
{
my ( $from_port, $from_num, $to_port, $to_num, $dd, $mm, $yy, $h, $m, $s, $amount )
= ( $30, $2, $32, $3, $6, $5, $4, $7, $8, $9, $17 );
$amount=ceil($amount/10);
$from_num_e164 = num2e164( $from_num );
$to_num =~ s/\*//g;
$to_num_e164 = num2e164( $to_num );
my $key = $yy."_".$mm."_".$dd."_".$h;
my $value = "$dd.$mm.$yy $h:$m:$s\t$amount\t$from_num\t$from_num_e164\t$to_num\t$to_num_e164\t$from_port\t$to_port\t0\n";
$DATA{$key} .= $value;
}
else
{
warn "unrecognized string:\n $_\n";
}
}
close( FILE );
foreach my $key ( keys %DATA )
{
my ( $YY, $MM, $DD, $HH ) = split( /_/, $key );
my $path = $dst_dir.$YY;
if ( !-e $path )
{
mkdir $path, 320;
}
$path = $path."/".$MM;
if ( !-e $path )
{
mkdir $path, 320;
}
my $file = $path."/".$DD."_".$HH;
open( FILE, ">".$file ) or die "can't create file '$file': $!\n";
print FILE $DATA{$key};
close( FILE );
chdir $path;
my $err = `zip ${DD}_${HH}.zip ${DD}_${HH}`;
unlink ( "${DD}_${HH}" );
chdir $base_path;
}
close FILE;
}
sub num2e164
{
my $num = shift;
chomp($num);
$before = $num;
if ( $num=="42324030200" )
{ $num="4232403020"; }
if( $num =~s/^77(\d{4})(\d+)$/7423677$1/ )
{
}
elsif ( $num =~ s/^79(\d{4})(\d+)$/7423679$1/ )
{
}
elsif ( $num =~ s/^64(\d{4})(\d+)$/7423664$1/ )
{
}
elsif( $num =~ s/^(\d{10})$/7$1/ )
{
}
elsif ( $num =~ s/^5(\d{4})(\d+)$/7423665$1/ )
{
}
elsif ( $num =~ s/^5(\d{4})$/7423665$1/ )
{
}
elsif ( $num =~ s/^66(\d{5})$/742366$1/ )
{
}
elsif ( $num =~ s/^01(\d+)$/7423601/ )
{
}
elsif ( $num =~ s/^02(\d+)$/7423602/ )
{
}
elsif ( $num =~ s/^03(\d+)$/7423603/ )
{
}
elsif( $num =~ s/^(\d{1,7})$/74236$1/ )
{
}
elsif( $num =~ s/^810(\d+)$/$1/ )
{
}
elsif( $num=~ s/^84236(\d+)$/074236$1/ )
{
}
elsif( $num =~ s/^8(\d+)$/7$1/ )
{
}
elsif( $num =~ s/^6(\d{5})(\d+)$/742366$1/ ){
}
elsif ( $num =~ s/^7(\d{10})$/7/ )
{
}
elsif ( $num =~ s/^(\d{11,13})$/$1/ )
{
}
elsif( $num =~ s/^(\d+)$/74236$1/ )
{
}
else
{
print "Unknown number type $num\n";
}
return $num;
}
Что сделать что бы вот это
Код:
elsif( $num=~ s/^84236(\d+)$/074236$1/ )
{
}
выполнялось только если звонок прошел скажем через 1 транк( $to_port=1) ???
Не спрашивайте почему 07...., так надо)