use File::Basename; use Fcntl qw(:flock); print"enter the input directory path:\n"; chomp($indir=); print"enter the events directory path:\n"; chomp($evdir=); print"enter the output directory name:\n"; chomp($tmpdir=<>); if (($indir eq $outdir)||($tmpdir eq $outdir)||($indir eq $tmpdir)) { print"you cannot have same input and ouput directory please change:\n"; exit(); } else { $ever="$evdir/events.txt"; chdir ("$indir") or die "$!"; opendir(DIR,".") or die "$!"; my @files=readdir DIR; close DIR; my %result=(); foreach $file(@files) { unless (($file eq ".") || ($file eq "..") ) { $base=basename("$file",".txt"); $filein="$indir/$file"; $srtfile="$outdir/$base._events.txt"; $tmpout="$tmpdir/$base._unsortedevents.txt"; open evein,$ever or die $!; flock(evein, LOCK_EX) or die "Cannot lock - $!"; while () { chomp; next unless length; my ($key,$value)=split /===/,$_; $result{$key}=$value; } close(evein); while (my($key,$value)=each (%result)) { open fln,$filein or die $!; flock(fln, LOCK_EX) or die "Cannot lock - $!"; while() { my ($line)=$_; chomp($line); if ($line=~m/$key/ig) { $line=~s/$key/$value/eeig; open flow,">>$tmpout" or die $!; #prints matching log lines in events. flock(flow,LOCK_EX) or die "Cannot lock - $!"; print flow $line,"\n"; } } print $value,"\n"; close(flow); } } } print"<----------------------------------------------->\n"; print "\t\t action done\n"; print"<----------------------------------------------->\n"; print "\t\t$count results found in search\n"; print"<****************..............******************>>\n"; close $out; }