grep a log file between 2 dates


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting grep a log file between 2 dates
# 22  
Old 07-02-2007
Adding the & m/$sap/ works for matching other text in the file also, u agree?

Code:
open FILE , $log;

while( <FILE> )

{
        $results = $results . $_ if ( $_ ge "$date $time" && $_ le "$date2 $time2" ) & m/$sap/
}

# 23  
Old 07-02-2007
and also, currently this only returns the line of text which the match appears on. I need to get the next 2 lines also. What is that code? thanks
# 24  
Old 07-02-2007
Quote:
Originally Posted by Epiphone
Adding the & m/$sap/ works for matching other text in the file also, u agree?

Code:
open FILE , $log;

while( <FILE> )

{
        $results = $results . $_ if ( $_ ge "$date $time" && $_ le "$date2 $time2" ) & m/$sap/
}

Code:
$results = $results . $_ if ( ( $_ ge "$date $time" && $_ le "$date2 $time2" ) ||  m/$sap/ )

# 25  
Old 07-02-2007
here's another way
Code:
awk -v date1="$1" -v time1="$2" -v date2="$3" -v time2="$4" '
BEGIN { 
    split(date1,d1,"/");split(time1,t1,":")
    t=sprintf("%s %s %s %s %s %s",d1[1],d1[2],d1[3],t1[1],t1[2],"00")
    starttime=mktime(t)
    split(date2,d2,"/"); split(time2,t2,":")
    t=sprintf("%s %s %s %s %s %s",d2[1],d2[2],d2[3],t2[1],t2[2],"00")
    endtime = mktime(t)
}
{  
   split($1,d,"/"); split($2,t3,":")
   T=sprintf("%s %s %s %s %s %s",d[1],d[2],d[3],t3[1],t3[2],"00")
   thetime=mktime(T)
   if ( starttime<=thetime && thetime <= endtime ) {
      print $0
   }
}
' "file"

output:
Code:
# ./test1.sh 2007/04/25 16:07 2007/05/25 17:07
2007/04/25 16:07:12.145701
2007/05/25 14:07:12.145701
2007/05/25 17:07:12.145701

# 26  
Old 07-02-2007
Code:
$results = $results . $_ if ( ( $_ ge "$date $time" && $_ le "$date2 $time2" ) ||  m/$sap/ )

The code above is returning everything again and being filtered? Where using & instead of || seems to work.

But with the & only get the 1 line and not lines below.

log file looks like:

2007/05/25 15:51:36.957753 dsfsdf dsfdfdf-sdfdfdf Trace name: sfsdfdsf
dfdsfdsfdsfsdfsdfdfdsfsdfsdf
sdfsdfsdfsdfsdfsdfdsfsdfsdfdf
2007/05/25 15:51:36.957753 dsfsdf dsfdfdf-sdfdfdf Trace name: sfsdfdsf
dfdsfdsfdsfsdfsdfdfdsfsdfsdf
sdfsdfsdfsdfsdfsdfdsfsdfsdfdf
2007/05/25 15:51:36.957753 dsfsdf dsfdfdf-sdfdfdf Trace name: sfsdfdsf
dfdsfdsfdsfsdfsdfdfdsfsdfsdf
sdfsdfsdfsdfsdfsdfdsfsdfsdfdf
# 27  
Old 07-02-2007
Quote:
Originally Posted by Epiphone
Code:
$results = $results . $_ if ( ( $_ ge "$date $time" && $_ le "$date2 $time2" ) ||  m/$sap/ )

The code above is returning everything again and being filtered? Where using & instead of || seems to work.

But with the & only get the 1 line and not lines below.

log file looks like:

2007/05/25 15:51:36.957753 dsfsdf dsfdfdf-sdfdfdf Trace name: sfsdfdsf
dfdsfdsfdsfsdfsdfdfdsfsdfsdf
sdfsdfsdfsdfsdfsdfdsfsdfsdfdf
2007/05/25 15:51:36.957753 dsfsdf dsfdfdf-sdfdfdf Trace name: sfsdfdsf
dfdsfdsfdsfsdfsdfdfdsfsdfsdf
sdfsdfsdfsdfsdfsdfdsfsdfsdfdf
2007/05/25 15:51:36.957753 dsfsdf dsfdfdf-sdfdfdf Trace name: sfsdfdsf
dfdsfdsfdsfsdfsdfdfdsfsdfsdf
sdfsdfsdfsdfsdfsdfdsfsdfsdfdf
Can you show your full script?
# 28  
Old 07-02-2007
Code:
#!/usr/local/bin/perl

################## Constructors

use XML::Simple;

use Time::HiRes qw(gettimeofday tv_interval);

use File::Path;

$xml = new XML::Simple;

$xml1 = new XML::Simple;
        
$data = $xml->XMLin("/home/fdsfdsf/fdsfdsf/config.xml");
                
$data1 = $xml1->XMLin("/home/fdsfdsf/fdsfdsf/logconfig.xml");
        
################### Variables
        
$phase = $ARGV[0];
                
$code = $ARGV[1];
        
$date = $ARGV[2];

$time = $ARGV[3];

$date2 = $ARGV[4];

$time2 = $ARGV[5];

$log = "/home/fdsfdsf/fdsfdsf/" . $data1->{log}->{$phase}->{file};

$allowed = $data->{customer}->{$code}->{allowed};

$sap = $data->{customer}->{$code}->{sap};

$customer = $data->{customer}->{$code}->{full_name};

$notallowed = "An unauthroised request to run a trace for customer $customer was prevented";

$grepfail =  "Unsuccessful! Not found";

$command = "@ARGV";

$grepsuccess = "Success! Please see the Results log";

################# Timestamp generation for Output

($epochseconds, $microseconds) = gettimeofday;

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epochseconds);

$year = $year+1900;

        if ($mon =~ 0-9) {

                $mon = "0$mon";

        }

        if ($mday =~ 0-9) {

                $mday = "0$mday";

        }

$timestamp = "$year/$mon/$mday $hour:$min:$sec.$microseconds";

###################### Trace Authorisation

if ($allowed =~ m/yes/) {

$flag = 0;

} else {

$flag = 1;

}

open (OUTPUTLOG, ">> /home/fdsfdsf/fdsfdsf/output.log");

##################### Search Command

if ($flag =~ m/0/) {

open (OUTPUTSTATUS, "> /home/fdsfdsf/fdsfdsf/tmp/$customer.status");

open FILE , $log;

while( <FILE> )

{
        #$results = $results . $_ if ( ( $_ ge "$date $time" && $_ le "$date2 $time2" ) || m/$sap/ )
        $results = $results . $_ if ( ( $_ ge "$date $time" && $_ le "$date2 $time2" ) &  m/$sap/ )

}

#################### Writing Output

if (!$results) {

print OUTPUTLOG "####$timestamp####\nCommand: ./s $command\nComment: $grepfail\n";

print OUTPUTSTATUS "1\n";

} else {

mkpath "/home/fdsfdsf/fdsfdsf/$phase/$code";

open (OUTPUTRESULTS, ">> /home/fdsfdsf/fdsfdsf/$phase/$code/results.log");

print OUTPUTRESULTS "####$timestamp####\n$results\n";

print OUTPUTSTATUS "0\n";

print OUTPUTLOG "####$timestamp####\nCommand: ./s $command\nComment: $grepsuccess\n";

}

} else {

print OUTPUTLOG "####$timestamp####\nCommand: ./s $command\nComment: $notallowed\n";

}

close (OUTPUTLOG);
                                  
close (OUTPUTSTATUS);

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. What is on Your Mind?

Grep file containing dates

How to grep a file containing dates to only last 30 days then move to another folder (7 Replies)
Discussion started by: kmarcus
7 Replies

2. Shell Programming and Scripting

Grepping only dates from a log file

Hi All, I have a log file where every line contains a date and some other data, i want to grep only the date from every line to a different file. Please help how to get this. Thanks in advance !! (25 Replies)
Discussion started by: nanz143
25 Replies

3. Shell Programming and Scripting

Grep search for value between dates

Hi I am new to scripting and I have a requirement to grep a value from large numbers of xml files and see if this value exist then I want to check the date and see if it falls between two dates (eg: today and feb 17), then print the name of file. the values in xml file is as follow... (7 Replies)
Discussion started by: mmsiddig
7 Replies

4. Shell Programming and Scripting

Script to read a log file and run 2nd script if the dates match

# cat /tmp/checkdate.log SQL*Plus: Release 11.2.0.1.0 Production on Mon Sep 17 22:49:00 2012 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production FIRST_TIME NEXT_TIME... (1 Reply)
Discussion started by: SarwalR
1 Replies

5. Shell Programming and Scripting

Shell Script to grep Job File name and Log File name from crontab -l

Hello, I am new to shell scripting. I need to write a shell script where i can grep the name of file ie. .sh file and log file from crontab -l. #51 18 * * * /home/oracle/refresh/refresh_ug634.sh > /home/oracle/refresh/refresh_ug634.sh.log 2>&1 #40 17 * * * /home/oracle/refresh/refresh_ux634.sh... (1 Reply)
Discussion started by: guptra
1 Replies

6. UNIX for Dummies Questions & Answers

How to write the dates between 2 dates into a file

Hi All, I am trying to print the dates that falls between 2 date variables into a file. Here is the example. $BUS_DATE =20120616 $SUB_DATE=20120613 Output to file abc.txt should be : 20120613,20120614,120120615,20120616 Can you pls help me accomplish this in LINUX. Thanks... (5 Replies)
Discussion started by: dsfreddie
5 Replies

7. Shell Programming and Scripting

How to processing the log file within certain dates based on the file name

Hi I am working on the script parsing specific message "TEST" from multiple file. The log file name looks like: N3.2009-11-26-03-05-02.console.log.tar.gz N4.2009-11-29-00-25-03.console.log.tar.gz N6.2009-12-01-10-05-02.console.log.tar.gz I am using the following command: zgrep -a --text... (1 Reply)
Discussion started by: shyork2001
1 Replies

8. Shell Programming and Scripting

find log file between two dates

Dear All, Please can you help me to crack this query? If the log files for the task above all had a naming convention of myoutput_YearMonthDay.log (i.e. myoutput_20060215) How would you find only those log files created between the 10th and the 20th of each month going back the last 365 days.... (1 Reply)
Discussion started by: justin_mca
1 Replies

9. Shell Programming and Scripting

grep a log file to filter previous dates

Hi, I have problem of filtering a log file from my perl script. #cat /data/pinpe.csv_20070731 | nawk -v FS=, '{print $1','$18','$22','$26}' | grep -w 100 | grep -w 1 | nawk '{print $4}' Below is the output: 2009-06-16 2009-01-29 2009-06-02 2008-03-05 2007-08-05 2007-09-24... (5 Replies)
Discussion started by: pinpe
5 Replies

10. Shell Programming and Scripting

help searching log file with dates

Im tyring to create a script that will show me any lines in a file with todays date and yesterdays, the date format in the file is as follows ----- amqxfdcx.c : 728 -------------------------------------------------------- 07/12/05 09:53:20 AMQ6109: An internal WebSphere MQ error has... (3 Replies)
Discussion started by: csaunders
3 Replies
Login or Register to Ask a Question