← Back to team overview

sslug-teknik team mailing list archive

Re: log

 

Hej Frank et al.
Jeg tror det er noget i denne stil du er ude efter?

awk 'BEGIN{n=0; lastDate="";}/[0-2][0-9]\/[A-z][a-z][a-z]\/2007:[0-2][0-9]:[0-5][0-9]:[0-5][0-9]/{ if ( $4 == lastDate ) x++; else { print lastDate" "x; lastDate=$4; x=1;} }' access_log

Dog vil output indeholde en [ foran datoen hvis det er en apache log som er det jeg har brugt i eksemplet.
Jeg vil lade det være en øvelse i awk at fjerne den :-)
/Thor

----- Original Message ----
From: Frank Vestergaard Pedersen <sslug@xxxxxxxxxxxx>
To: sslug-teknik@xxxxxxxx
Sent: Saturday, January 13, 2007 3:10:43 PM
Subject: Re: [TEKNIK] log


Frank Damgaard wrote:
> On Sat, Jan 13, 2007 at 13:43:41 +0100, Frank Vestergaard Pedersen wrote:
> ....
>   
>> Jeg burde måske have forklaret det lidt bedre!  nej det er ikke det 
>> konkrete  time-stamp jeg er på udkig efter , men alle time-stamp i 
>> logfilen +  X antal linjer  efter  hvert  time-stamp.
>>
>> Jeg havde selv tænkt på noget i retningen af dette:
>>
>> cat LOGFIL | grep "time-stamp format..." + X linjer....
>>     
>
> Dvs. en regular expression til at matche flere tidsangivelser
> eller en liste af tider?
> Så det er stadig noget uklart.
>
> grep/egrep du'r  ikke da du vil matche et antal efterfølgende linjer
> ud fra krav om N linier og ikke noget i reg-expression match på tid.
>
> Du skal nok se på awk eller perl  til den slags , og lige
> definere hvordan du vil angive "time stamp" , og evt. flere af disse.
>
> Dog listes ikke noget hvis dato/tid ikke  matcher i reg-expression).
> Flere datoer kan klares med gruppering i regular expressions.
> I linux kan du med "man 7 regex" og evt. "man gawk" læse
> mere om  syntax med regular expressions.
>
> BEGIN {
> # kald eksempeler:
> # awk -v n=6 -v t="Jan 13 12:09:01" -f listlog.awk  /var/log/syslog
> # regular expression: 
> # awk -v n=6 -v t="Jan 13 12:0[789]:.." -f listlog.awk  /var/log/syslog
> # awk -v n=6 -v t='Jan 13 09:|Jan 13 11:|Jan 13 14:' ....
> # awk -v n=6 -v t='Jan (13 09:|13 11:|13 14:)' ....
> #
>   lncnt=0;
>   if (n<=0) n=8;
> }
>
> lncnt>0 { 
>   print ; 
>   lncnt--;
>   next;
> }
>
> $0 ~ t { 
>   lncnt=n;
>   print ;
>   next;
> }
>
>   

Jeg havde egentligt regnet med at jeg nok skulle ud i noget regular 
expression med en :

grep -A x 2007 LOGFIL

vil nok kunne gøre det da 2007 i alle de time-stamp jeg skal lede efter. 
Ellers er der vel ikke andet at gøre end at tage sig sammen og få lært 
awk eller noget ander der kan regular expression.

Men jeg takker for nu

mvh
Frank


 
____________________________________________________________________________________
Expecting? Get great news right away with email Auto-Check. 
Try the Yahoo! Mail Beta.
http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html