Gå til innhold

Tail og awk, kan de bli venner?


Gjest Slettet+6132

Anbefalte innlegg

Gjest Slettet+6132

Stresser nå litt med min debian-server, prøver å lese apache sine logger i realtime, men vil manipulere dataene jeg får ut. Loggfila er ikke særlig stor, men samme hvordan jeg prøver får jeg ikke noe output.

 

cat access.log | awk '{print $1 " (" $9 ") " $7}' gir dette:

192.168.1.1 (200) /webalizer/

192.168.1.1 (200) /webalizer/usage.png

192.168.1.1 (200) /webalizer/usage_200607.html

192.168.1.1 (200) /webalizer/daily_usage_200607.png

192.168.1.1 (200) /webalizer/hourly_usage_200607.png

192.168.1.1 (200) /webalizer/ctry_usage_200607.png

 

Følgende kommandoer blir testet etter iherdig googling:

tail -f access.log | awk '{print $1 " (" $9 ") " $7}'

og

awk '{print $1 " (" $9 ") " $7}' <(tail -f access.log)

 

Ingen av disse gir meg noe output av noe slag. Noen forslag?

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+6132

olear: Den fungerte desverre dårlig.

LessThanJake: Den virket litt bedre, ser ut til at den er brukbar :)

 

EDIT: watch --interval 5 "tail -n 50 access.log | awk '{print \$1 \"\\t(\" \$9 \")\\t\" \$7}'", alle tiders!

Endret av Slettet+6132
Lenke til kommentar
Gjest Slettet+6132

Merkelige saker ...

 

Ok, bruker nå watch da, men la oss si jeg vil endre apaches timestamp [18/Jul/2006:17:56:24 +0200] til noe mer nyttig, som feks 18. Jul 2006 (tab) 17:56:24, hvordan går jeg da frem?

Lenke til kommentar
Merkelige saker ...

 

Ok, bruker nå watch da, men la oss si jeg vil endre apaches timestamp [18/Jul/2006:17:56:24 +0200] til noe mer nyttig, som feks 18. Jul 2006 (tab) 17:56:24, hvordan går jeg da frem?

6528259[/snapback]

sed

 

edit: det her var jo morsom sovemedisin :)

 

echo "18/Jul/2006:17:56:24 +0200" | sed -e s/+[0-2][0-9][0-6][0-9]// -e s#/#.\ # -e s#/#\ # -e s/:/\ \ /

Endret av LessThanJake
Lenke til kommentar
Gjest Slettet+6132

Flotters, hvordan ville du ha putta det inn i watch --interval 5 "tail -n 50 access.log | awk '{print \$1 \"\\t(\" \$9 \")\\t\" \$7}'" da?

 

EDIT: Og $4 fra awk vil jo bli [18/Jul/2006:17:56:24, hvordan løses det? :hmm:

 

Går meg vill i all teksten snart ...

 

EDIT: Løste problemet med [: echo "[18/Jul/2006:17:56:24 +0200" | sed -e s/+[0-2][0-9][0-6][0-9]// -e s#/#.\ # -e s#/#\ # -e s/:/\ \/ -e s/\\[//g gir nå 18. Jul 2006 17:56:24.

 

Så er bare spørsmålet; hvordan få dette inn i den andre kommandoen?

Endret av Slettet+6132
Lenke til kommentar
Gjest Slettet+6132

Endelig! Løste problemet med å lage en awk-fil og rote litt rundt.

 

apachelog (awk-fil)

{
ip = $1
status = $9
path = $7
date = $4
print date "\t" ip "\t(" status ")\t" path
}

 

program (fil for å slippe å escape all coden)

tail -n 50 access.log | awk -f apachelog | sed -e s/+[0-2][0-9][0-6][0-9]// -e s#/#.\ # -e s#/#\ # -e s/:/\ \/ -e s/\\[//g

 

Kommando: watch --interval 5 "./program"

 

Flotters, takk for hjelpen!

 

EDIT: Output:

20. Jul 2006 23:44:39  192.168.1.1    (304)  /webalizer/

20. Jul 2006 23:44:39  192.168.1.1    (304)  /webalizer/usage.png

20. Jul 2006 23:48:02  192.168.1.1    (304)  /webalizer/

20. Jul 2006 23:48:02  192.168.1.1    (304)  /webalizer/usage.png

20. Jul 2006 23:48:08  192.168.1.1    (304)  /webalizer/

20. Jul 2006 23:48:08  192.168.1.1    (304)  /webalizer/usage.png

Endret av Slettet+6132
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...