I am trying to take a log file and match it against a file of spiders/searchbots to weed them out.
I want to delete the matching strings before writing out to a file. I tried using index and now grep. I am pretty new to this type ofuse for perl. I normally just do cgi stuff. Thanks in advance for your time.
Here is my code:
#!perl use strict; use Text::CSV_XS; use warnings; use FileHandle; # declarations my($log_file_path)="\\\\dt00mx84\\LogArchive\\www.ksdot.org\\dt00m +h77\\"; my($robot_file)="\\\\dt00mx84\\LogArchive\\Webrobots.txt"; my($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $day +OfWeek, $dayOfYear, $daylightSavings) = localtime(); my$x="ex"; my($extension)=".log"; my($year)=1900+$yearOffset; my($month_new)=1+$month; my $day=$dayOfMonth-1; my @logmessages; # build filename format # this is how log files are named using the yy/mm/dd formatex040101.lo +g if (length($month_new)< 2) { $month_new="0".$month_new }; if (length($dayOfMonth)< 2) { $dayOfMonth="0".$dayOfMonth }; # build input file name and file path to read from my($filename)=$x.substr($year,2).$month_new.$day; my($log_file)=$log_file_path.$filename.$extension; # build output file name and path to write file my($file_name)=substr($year,2).$month_new.$day; my($out_file)=$log_file_path.$file_name.$extension; # Declare the FileHandles and open the input and output files my $fh= new FileHandle; open(LOG, "<$log_file") or die "Could not open file"; @logmessages=<LOG>; close(LOG); open(ROBOT, "<$robot_file") or die "Could not open file:"; my @robots =<ROBOT>; close(ROBOT); my $outfile= new FileHandle; open(OUTFILE, ">$out_file") or die "Could not open file"; #if (index(@logmessages,@robots)==-1){ if (grep(/@logmessages/, @robots)==0){ print OUTFILE @logmessages;} close(OUTFILE);
In reply to Deleting a matching string in an array by Shamaeso
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |