J
Jacko
Grünschnabel
Hallo zusammen,
ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen.
Anbei ein Ausschnitt aus einer xml Datei:
Im Moment nutze ich ein Skript, dass mir die beiden Zeilen mit den Referenzen 9 & 10 mit Hilfe von einem übergebenem Parameter verändert. Aufruf erfolgt mit z.B.
Im Anschluss sehen alle Zeilen mit Ref 9 & 10 wie folgt aus:
Solange die Batch Nummer in der Datei überall gleich ist, reicht mir ein Parameter. Jedoch kommt es häufig vor, dass die Batch Nummer verschieden ist (siehe auch Beispiel oben) und demnach auch die Werte in Ref 9 & 10.
Nun würde ich gerne wissen, ob und vielleicht wie es möglich ist, mehrere Werte gleichzeitig zu ändern, je nachdem welche Batch Nummer man mit übergibt.
Dachte an einen Aufruf wie z.B.:
Das Skript sucht die gesamte Datei nach dem Wert batch#1 geht immer 14 bzw. 15 Zeilen runter und ändert dort den Wert für Ref 9 & 10 nach Vorgabe parameter#1. Das selbe dann für batch#2, batch #3 etc.
Hat jemand eine Idee?
Danke und Gruß
Jacko
ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen.
Anbei ein Ausschnitt aus einer xml Datei:
Code:
<Position>
<SKU>A/370269/10432/32D</SKU>
<Batch>00320160501</Batch>
<Description>Carlotta</Description>
<Amount>1</Amount>
<ForeignPos1>172991</ForeignPos1>
<ForeignPos2>10</ForeignPos2>
<Positionreferences>
<PosReference number="1"/>
<PosReference number="2"/>
<PosReference number="3">0</PosReference>
<PosReference number="4">0</PosReference>
<PosReference number="5"/>
<PosReference number="6">370269</PosReference>
<PosReference number="7">10432</PosReference>
<PosReference number="8">pearl grey</PosReference>
<PosReference number="9"/>
<PosReference number="10"/>
<PosReference number="11">26 INCH</PosReference>
</Positionreferences>
</Position>
<Position>
<SKU>A/370269/10432/32D</SKU>
<Batch>00520160501</Batch>
<Description>Carlotta</Description>
<Amount>6</Amount>
<ForeignPos1>172992</ForeignPos1>
<ForeignPos2>10</ForeignPos2>
<Positionreferences>
<PosReference number="1"/>
<PosReference number="2"/>
<PosReference number="3">0</PosReference>
<PosReference number="4">0</PosReference>
<PosReference number="5"/>
<PosReference number="6">370269</PosReference>
<PosReference number="7">10432</PosReference>
<PosReference number="8">pearl grey</PosReference>
<PosReference number="9"/>
<PosReference number="10"/>
<PosReference number="11">26 INCH</PosReference>
</Positionreferences>
</Position>
Im Moment nutze ich ein Skript, dass mir die beiden Zeilen mit den Referenzen 9 & 10 mit Hilfe von einem übergebenem Parameter verändert. Aufruf erfolgt mit z.B.
Code:
vtqichange test.xml 4711/0815
Code:
#!/bin/bash
if [ $# -lt 2 ] ; then
echo "Usage: `basename $0` <Filename> <Datafield8>"
else
# initialize variable for filename
file=$1
# convert xml file in readable format
xmllint --format $file > $file.tmp
# split string from $2 in seperate variables
IFS="/"
Wert=$2
set -- $Wert
p9=$2
p10=$1
# simple sed replace but output to a new file
sed 's@NEW@UPD@' $file.tmp > $file.tmp2
sed 's@<PosReference number="9"/>@<PosReference number="9">'$p9'</PosReference>@' $file.tmp2 > $file.tmp3
sed 's@<PosReference number="10"/>@<PosReference number="10">'$p10'</PosReference>@' $file.tmp3 > $file.tmp4
# append prefix from original file name with "_script"
new=`echo $file | sed 's@.xml@_script.xml@'`
# check if $new is empty or not
if [ -z "$new" ]
then
:
else
cp $file.tmp4 $new
fi
# delete all temporary files
rm -f $file.tmp $file.tmp2 $file.tmp3 $file.tmp4
fi
Im Anschluss sehen alle Zeilen mit Ref 9 & 10 wie folgt aus:
Code:
<PosReference number="9">0815</PosReference>
<PosReference number="10">4711</PosReference>
Solange die Batch Nummer in der Datei überall gleich ist, reicht mir ein Parameter. Jedoch kommt es häufig vor, dass die Batch Nummer verschieden ist (siehe auch Beispiel oben) und demnach auch die Werte in Ref 9 & 10.
Nun würde ich gerne wissen, ob und vielleicht wie es möglich ist, mehrere Werte gleichzeitig zu ändern, je nachdem welche Batch Nummer man mit übergibt.
Dachte an einen Aufruf wie z.B.:
Code:
basename $0 <Filename> <batch#1> <parameter#1> <batch#2> <parameter#2> <batch#3> <parameter#3>
Das Skript sucht die gesamte Datei nach dem Wert batch#1 geht immer 14 bzw. 15 Zeilen runter und ändert dort den Wert für Ref 9 & 10 nach Vorgabe parameter#1. Das selbe dann für batch#2, batch #3 etc.
Hat jemand eine Idee?
Danke und Gruß
Jacko