Toon posts:

[bash] Uitsplitsen van string (-> mysql)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een scrippie aan t maken om het totaal aan dataverkeer van een user te meten. Ik save de gegevens in /var/log/apache/traffic.log:

Voorbeeld string:
code:
1
www.muhlenbaumer.com 192.168.0.2 /~michiel/test/index.php 289 20020513164001

Dit splits ik uit en gooi dit in een mysql dbase. Maar: ik wil dat die '~michiel' er ook wordt uitgevist en apart wordt opgeslagen. Hoe doe ik dat?

Mijn huidige script (het deel dat er toe doet):
code:
1
2
3
4
5
6
7
8
9
10
mysql traffic -e "load data infile '/var/log/apache/traffic.import'
            into table trafficimport fields terminated by ' '"

mysql traffic -e "insert into trafficstats
            select  hostname,
            ip,
            url,
            size,
            timestamp
            from trafficimport"

Ik wist niet of ik het in NOS of PW moest gooien, dan maar hier :P

Verwijderd

Topicstarter
Ok, een stappie terug:

in de string:
code:
1
/~michiel/test/index.php

wil ik de positie van de tweede "/" weten. (Dan kan ik met substring ed die ~michiel er wel uit vissen ;)

Verwijderd

Topicstarter
Ok, dankzij CyBeR (in #linux ;)) is het me gelukt :D
code:
1
muhlenbaumer apache # echo "/~michiel/test/index.php" | cut -d'/' -f2

Geeft als resultaat:
code:
1
~michiel

Nu nog een dingetje: die ~ moet er ook af :P

Verwijderd

Topicstarter
CyBeR is te goed :P
code:
1
echo $(echo "/~michiel/test/index.php" | cut -d'/' -f2)|sed s/^~//

:D

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 13 mei 2002 18:32 schreef CowMike het volgende:
code:
1
/~michiel/test/index.php

wil ik de positie van de tweede "/" weten. (Dan kan ik met substring ed die ~michiel er wel uit vissen ;)
Bash kan toch met regexps werken?
Kan je dan niet iets als '~/([^/]* )/' opzoeken?
Was je dus al achter ;)

Verwijderd

Topicstarter
Klopt :)

Ik zal mijn hele script maar even posten, om het wat duidelijker te maken ;)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if [ -e /var/log/apache/traffic.log ]
  then

    rm -f /var/log/apache/traffic.import
    mv /var/log/apache/traffic.log /var/log/apache/traffic.import
    
    cat /var/log/apache/traffic.import >> /var/log/apache/traffic.bak

    mysql traffic -e "delete from trafficimport"

    mysql traffic -e "load data infile '/var/log/apache/traffic.import'
            into table trafficimport fields terminated by ' '"

    mysql traffic -e "insert into trafficstats
            select  hostname,
            ip,
            url,
            size,
            timestamp
            from trafficimport"

    mysql traffic -e "delete from trafficimport"
    rm -f /var/log/apache/traffic.import
  fi
fi

Ik splits die strings uit traffic.import dus uit, en een daarvan is "url". Op die "url" moet die regel toegepast worden en vervolgens moet /~[dit_moet_opgeslagen_worden]/ opgeslagen worden, maar hoe fix ik dat ?

  • stylee
  • Registratie: December 2000
  • Laatst online: 04-09-2021

stylee

blah zeg ik je

[ot]

Er schijnt een apache module te zijn die je logs standaard in een mysql db pleurt :P

Verwijderd

Topicstarter
Hmm lekker is dat :P Waar kan ik die vinden? Want dat zou wel makkelijk zijn :P

edit: gevonden (Google ;)), maar hij wil em niet installen...
Pagina: 1