PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : string zerlegen mit awk in einer for-schleife



meinereinerseiner
31-03-2005, 10:35
moins,

ich versuche einen string mit awk zu zerlegen, das geht auch alles solange
bis ich es von einer for-schleife machen lassen will:


#!/bin/sh
#

zeile="timeperiod[btime]=Plan B Loesung 2;;01:00-09:00;01:00-09:00;01:00-09:00;01:00-09:00;01:00-09:00;;"

PART1=`echo "$zeile" | awk -F\; '{print $1}'`

for (( i=2; $i <= 8; i++ )); do
PART$i=`echo "$zeile" | awk -F\; '{print $i}' i=$i`
done

# testausgabe
echo "$PART1;$PART2;$PART3;$PART4;$PART5;$PART6;$PART7;$ PART8"


das ist nicht das ganze script, nur ein auszug mit der problemstelle.
als testausgabe sollte eigentlich das selbe wie in $zeile rauskommen,
statt dessen bekomme ich nur:

./plepps2.sh: PART2=: command not found
./plepps2.sh: PART3=01:00-09:00: command not found
./plepps2.sh: PART4=01:00-09:00: command not found
./plepps2.sh: PART5=01:00-09:00: command not found
./plepps2.sh: PART6=01:00-09:00: command not found
./plepps2.sh: PART7=01:00-09:00: command not found
./plepps2.sh: PART8=: command not found
timeperiod[btime]=Plan B Loesung 2;;;;;;;


wo ist denn da nun wieder mein denkfehler - kann ja nur an der
verarbeitung von $i liegen.....

thx
der tom

peschmae
31-03-2005, 11:52
Da würde ich ein Array verwenden:


PART[$i]=`echo "$zeile" | awk -F\; '{print $i}' i=$i`


und dann für den Output:


for (( i = 2; $i <= 8; i++)); do
echo ${PART[$i]}
done


Mehr hier (http://www.tldp.org/LDP/abs/html/arrays.html)

MfG Peschmä

Joghurt
31-03-2005, 12:08
Das zweite Wort ist leer, was dazu führt, dass die Shell den Befehl
PART2= auswertet.
Du musst die Backticks also in Anführungszeichen schreiben
PART2="`echo $zeile|awk.....`"