Bestand schrijven via Bash, Perl, ? vanuit MySQL query

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben al een tijdje opzoek naar een manier om op de commandline textbestanden te maken met iets van BASH of Perl, dit gebruik maken van een template file.

Stel ik heb:

iditemkleur
1balrood
2banaangeel
3peergroen


En ik wil dit in een file schrijven als ik er een select * query op doe:


code:
1
2
3
4
5
6
7
8
9
kleuren:
rood
geel
groen

items:
bal
banaan
peer


Dan zou een template file moeten zijn:

code:
1
2
3
4
5
6
kleuren:
%color%


items:
%items%



Dit blijkt echter niet zo makkelijk als het lijkt.


Mijn idee was om een bash script te schijven dat de query uitvoert en een 2-tal arrays aanmaakt welke door een ander stuk bash code netjes onder elkaar wordt gezet. Ik kan met een stuk bash script een 2-tal arrays onder elkaar printen, het blijkt alleen dat bash niet zo heel geschikt lijkt te zijn om in combinatie met MySQL queries te gebruiken.

BASH is iets wat ik wel lekker vindt werken, een alternatief zou Perl moeten zijn, Perl is nog niet echt mijn ding, maar wat niet is kan nog komen natuurlijk.

Het is echter de vraag of dit wel de juiste talen zijn om te doen wat ik wil.

Heeft iemand ervaring met dit soort scripts ? Ik heb er al een paar weken naar gezocht maar kom er niet direct uit wat de manier is, de online voorbeelden zijn er ook niet helemaal lekker bij te vinden.

Een duwtje in de juiste richting zou dus wenselijk zijn :)

Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 15:59
Met `mysql -e 'select ...'` moet je toch wel een eindje komen? Zoiets bijvoorbeeld...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
rows=`mysql -Ee "select 'bal' as item,'rood' as kleur union select 'banaan','geel' union select 'peer','groen'" | grep -v "^*"`
echo kleuren:
echo "$rows" | while read r
do
  if [[ $r =~ '^kleur: (.+)' ]]; then
    echo ${BASH_REMATCH[1]}
  fi
done
echo
echo items:
echo "$rows" | while read r
do
  if [[ $r =~ '^item: (.+)' ]]; then
    echo ${BASH_REMATCH[1]}
  fi
done

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
En je zit toch in de PHP ook? Waarom zou je nog Perl gebruiken voor zoiets?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
GlowMouse schreef op dinsdag 15 december 2009 @ 00:01:
En je zit toch in de PHP ook? Waarom zou je nog Perl gebruiken voor zoiets?
Zou jij PHP gebruiken op de commandline ? Perl lijkt mij sneller in dat geval bij "hogere load".

@matthijsln: Heel erg bedankt, dat schept toekomstvisie :)

Daarna gewoon in één keer naar het bestand schrijven of per output ?

[ Voor 9% gewijzigd door Verwijderd op 15-12-2009 00:05 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op dinsdag 15 december 2009 @ 00:04:
[...]


Zou jij PHP gebruiken op de commandline ? Perl lijkt mij sneller in dat geval bij "hogere load".
Rustig, en waarom lijkt je dat?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
GlowMouse schreef op dinsdag 15 december 2009 @ 00:07:
[...]

Rustig, en waarom lijkt je dat?
Omdat ik twijfelde aan performance en of het uberhaubt wel wijs is om lokale bestanden mee te schrijven op de commandline :)

PHP is wel super flexibel dus dat is wel lekker.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 15 december 2009 @ 00:23:
[...]

Omdat ik twijfelde aan performance en of het uberhaubt wel wijs is om lokale bestanden mee te schrijven op de commandline :)
Twijfelen aan performance zonder cijfers om dat te staven is op zijn zachtst gezegd onhandig, en waarom het niet wijs zou zijn om bestanden lokaal weg te schrijven met PHP maar wél met Perl ontgaat me een beetje. ;)

Los daarvan: Waar hoort mijn topic? Praktijkprobleem, dus Programming. SEA>>PRG

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NMe schreef op dinsdag 15 december 2009 @ 00:51:
[...]

Twijfelen aan performance zonder cijfers om dat te staven is op zijn zachtst gezegd onhandig, en waarom het niet wijs zou zijn om bestanden lokaal weg te schrijven met PHP maar wél met Perl ontgaat me een beetje. ;)
Met dit soort manieren van scripting zie ik toch veel Perl langs komen. Ik denk omdat er al veel dingen ingebakken zitten met cpan en dergelijke.

Ik zal er eens een nachtje over slapen omdat het nu wat laat wordt maar PHP blijft dus dan zeker een optie :)

Bash valt zeker af ivm database werk.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik denk dat Bash toch iets meer gebruikt zal worden dan Perl voor deze doeleinden (hint: pipes). PHP komt misschien wat minder voor, maar in principe is elke taal die vanaf de commandline gerund kan worden wel geschikt. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Om in Perl met MySQL te kunnen werken moet je een CPAN module DBD::mysql installeren.
info

Het is overigens niet waar dat Perl minder gebruikt wordt voor deze doeleinden. Puur alleen al vanwege het feit dat Perl op zo'n beetje alle Unix/Linux systemen draait en ingeinstalleert staat.
En natuurlijk makkelijk laat implementeren in Apache.

[ Voor 6% gewijzigd door Verwijderd op 15-12-2009 08:11 ]

Pagina: 1