Hallo, On Tue, 17 Sep 2002, Jan Trippler wrote:
On 17 Sep 2002 at 1:59, David Haller wrote:
On Mon, 16 Sep 2002, Jan Trippler wrote:
On 16 Sep 2002 at 20:21, David Haller wrote:
On Mon, 16 Sep 2002, Fred Kastl wrote: [...] [bitte weiter oben im Thread nachschlagen] ==== Vorschlag ==== #!/bin/bash DBFILE="telefonliste.txt"
sed 's/ /_/g' < "$DBFILE" | \ ( IFS=";" while read BK VN NN ST HN WO PL VWP TP VWG TG VWF TF VWS TS VWH TH B GB NR BS AB EMAIL FIRMA SP STATUS DYNDNS EMAIL do echo "'$BK' '$VN' '$VWP' '$TG' '$VWF'" done ) ====
Und ja, AFAIK geht's ohne subshell net... [awk und perl]
Mir ist übrigens noch ne Variante eingefallen, die ist zwar nicht unbedingt eleganter, vermeidet aber auch das Maskieren der Blanks und die Vergewohltätigung von IFS:
#!/bin/bash DBFILE="telefonliste.txt"
cat $DBFILE | while read zeile; do BK="`echo $zeile | cut -f1 -d:`" VN="`echo $zeile | cut -f2 -d:`" # usw. done
*boerks* (du meintest uebrigens '-d;', nicht '-d:'... Uebrigens: ich habe die Erfahrung gemacht, dass obige Quotingweise falsch ist, wenn z.B. Leerzeichen auftauchen, richtig ist: BK=`echo "$zeile" | ...` Die "geechote" Variable muss gequotet werden, die `` nicht. Dann eher noch: ==== sed 's/ /_/g' < $DBFILE | \ while read zeile do OIFS="$IFS"; IFS=";" set -- $zeile ## nein, $zeile darf hier nicht gequotet werden! IFS="$OIFS" BK="$1"; VN="$2"; NN="$3"; ST="$4"; HN="$5"; WO="$6" PL="$7" VWP="$8"; TP="$9"; VWG="${10}"; TG="${11}"; VWF="${12}" # ... done ==== Zur Erinnerung: einen externen Prozess aufzurufen ist "teuer". Und das pro Zeile einmal pro Variable duerfte dir die Performance recht deutlich versauen. -d'*scnr*'nh -- Ihr Scherzkekse! Computer - und das sollte bekannt sein - rechnen garnicht. Sie setzten oder löschen bits. Nicht mehr, nicht weniger. Daß dies gelegentlich wie "Rechnen" oder "Usenet" oder "Display Postscript" aussieht ist eher Zufall, trägt aber zur Erhaltung der Art bei. -- Dietz Proepper in dasr