hvis alle går i sort

From: Claus Guttesen (none@cguttesen--yahoo.dk.lh.bsd-dk.dk)
Date: Tue 04 May 2004 - 11:38:40 CEST


Date: Tue, 4 May 2004 11:38:40 +0200 (CEST)
From: Claus Guttesen <none@cguttesen--yahoo.dk.lh.bsd-dk.dk>
Subject: hvis alle går i sort
To: bsd-dk@bsd-dk.dk

Hej.

Jeg har en del ældre weblog'er, som jeg har lavet
noget statistik på. Flere web-servere logger til en
fælles logfil, som så pakkes én gang i døgnet.

Mit problem var at web-serverne ikke tidligere
synkroniserede deres ur mod en fælles ntp-server, så
et (næsten) samtidig besøg kunne med to forskellige
web-servere, have mange minutters forskel.

Awstats-weblog-programmet er relativ obs på at
rækkefølgen er tidsmæssigt korrekt, den vil ignorére
efterfølgende felter, hvis de ikke kommer i rigtig
rækkefølge.

Derfor skulle jeg køre weblog'en gennem
sort-kommandoen, og det var dér jeg fandt ud af, hvor
elegant kommandoen og syntaksen egentlig er.

De første 38 tegn skulle skal væk, overflødig info.

Det næste tegn er enten den første del af en
ip-adresse eller blank. Er det blank, skal det væk.

Så kommer selve sort-kommandoen, den skal dele en
linie op med blank " " som separator.

Her kommer et eks. på starten af en linie, original
adresse erstattet:

a.b.c.d - - [04/May/2004:05:06:21 +0200]

Udfra det ser vi at den først sortérer efter år
(4.9,4.12), dernæst måned (4.5M,4.7M, M = month), dato
(4.2,4.3) og tilsidst tidspunkt (4.14,4.21).

time zcat http.log.2004-04-30.gz | \
 grep -v " last message repeated "| \
 cut -c 38- | \
 sed -e "s/^ //"| \
 env LANG=C sort -bd -t " " -k 4.9,4.12 -k 4.5M,4.7M
-k 4.2,4.3 -k 4.14,4.21 -s > http.log

Der er sikkert andre måder at komme frem til samme
resultat, muligvis sed/awk?? Men sort-kommandoen er
ikke mindre end genial.

Claus

Yahoo! Mail (http://dk.mail.yahoo.com) - Gratis: 6 MB lagerplads, spamfilter og virusscan



This archive was generated by hypermail 2b30 : Wed 15 Nov 2006 - 18:24:40 CET