Bash script met array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ben een newbie hier.

Ben bezig met een scriptje om een xml file uit te lezen.

XML file bestaat uit x aantal variabelen die in de xml file meerdere keren voorkomen.

Nu heb ik diverse variabelen die uit 1 tekst bestaan maar ook variabelen die uit meerdere woorden bestaan bijvoorbeeld "Oude Gracht 12"

Wat heb ik tot nu toe

ik lees de xml file uit aan de hand van de variabele

adres=`awk '/<afl_var_adres>/ {stp=index($0,">")+1; \
newstr=substr($0,stp); \
etp=index(newstr,"<")-1; \
print substr(newstr,0,etp); \
}' $xmlfile`

ik plaats deze vervolgens in een array

L_ARRAY=( `echo ${adres}` )

Nu dacht ik dat ik dmv onderstaand commando de volledige tekst regel te krijgen echter..... ik krijg alleen het 2e woord terwijl ik de complete tekst in deze array locatie wil hebben

echo ${K_ARRAY[2]}

Is er een mogelijkheid om toch die volledige regel (bijvoorbeeld "Oude Gracht 12") in 1 zo'n Array locatie te krijgen

Dus:

echo ${K_ARRAY[2]}

geeft dan: Oude Gracht 12

Ik hoor graag jullie suggesties.

Acties:
  • 0 Henk 'm!

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08 16:29

Tim

Moet je nog iets doen met die data? Anders zou ik gewoon awk gebruiken om de xml te printen of een while read loop.
Je zou ook print '"' +substr(newstr,0,etp) +'"'; kunnen proberen.

Overigens, `echo ${adres}` kan je ook schrijven als gewoon ${adres}.
Edit: oh nee.. echo stript alle newlines.

[ Voor 41% gewijzigd door Tim op 31-01-2010 09:43 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik moet de gegevens weer outputten naar een bestand dat weer verder in het traject gaat worden gebruikt.

print '"' +substr(newstr,0,etp) +'"'; werkt overigens ook niet

xml file zier er als volgt uit

<afl_var_adres>Pleinweg 12 a</afl_var_adres>

Acties:
  • 0 Henk 'm!

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08 16:29

Tim

Dan zou ik gewoon alleen awk gebruiken.

Voordat ik poste had ik nog even in de man page gekeken van bash, maar daar vond ik niets over field seperators in combinatie met arrays. Maar het werkt toch wel:
Bash:
1
2
IFS=$'\n'
L_ARRAY=( ${adres} )
IFS is dus alleen een newline.

[ Voor 3% gewijzigd door Tim op 31-01-2010 21:34 . Reden: $'\n' kan blijkbaar ook ]


Acties:
  • 0 Henk 'm!

Verwijderd


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Probleem op deze wijze opgelost

while IFS='<>' read _ starttag value endtag; do
case "$starttag" in
afl_var_locatie) Locatie+=("$value") ;;
afl_var_adres) Adres1+=("$value");;
esac
done < $xmlfile

Acties:
  • 0 Henk 'm!

  • JohnR
  • Registratie: April 2003
  • Niet online

JohnR

Koffie is lekker!

De methode lijkt me op het eerste gezicht nogal foutgevoelig. Wat doe je als de variabelen over meerdere regels verspreid staan etc. (op zich hele valide XML syntax). Speciaal voor dit doel zijn XML parsers ontwikkeld (als XALAN, SAXON etc.) Probeer die eens :)

/(bb|[^b]{2})/

Pagina: 1