PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash: read line separieren



r00ki3
30.06.2005, 13:31
Hallo ihr lieben,

ich habe noch eine Frage....in einem Skript befindet sich

while read line;
[do stuff line$]

die ausgelesene Datei hat genau EINEN Eintrag pro Zeile.

Kann ich hinter dem erwähnten EIntrag einen weiteren Eintrag
mit einem Delimiter setzen, um eine neue Variable für eine weitere Funktion
erzeugen und nutzen zu können ? Wie spreche ich diese dann an ?
Oder gibt es ein praktischeres Verfahren ? Wichtig ist die zeilenweise
zuordnung.

Daniel

Schlaubi_fi.de
30.06.2005, 14:17
Kapier ich nicht, was du meinst...und line$ - wie soll das funktionieren? Du meinst doch sicher $line oder etwa nicht? Es wäre super, könntest du uns ein Beispiel der Eingabe-Datei und dem von dir gewünschten Output geben.

tr0nix
30.06.2005, 14:37
Jeps, einfach `read eintrag1 eintrag2` -> z.B. `read vorname nachname`.

r00ki3
30.06.2005, 14:58
Das ist ja ausgezeichnet.....!!!!!

Vielen Dank.....


Daniel

Schlaubi_fi.de
30.06.2005, 16:19
Jetzt hab ichs auch kapiert ^^
Natürlich geht das :D

neutrino1
30.06.2005, 18:27
Hi!

Seit meinem letzten script verwende ich auch in solchen Konstruktionen arrays, welche einige Vorteile haben.
Ich geh mal davon aus, daß die Einträge durch Leerzeichen getrennt sind, dann kann man folgendes machen:



cat testfile|while read;do
ARRAY_NAME=($REPLY)
echo ${#ARRAY_NAME } # Anzahl der Elemente
echo ${ARRAY_NAME } # Ausgabe aller Elemente (also der Zeile)
echo ${ARRAY_NAME[4]} # 5. Element (weil index bei 0 beginnt)
echo ${#ARRAY_NAME[4]} # Zahl der Zeichen vom 5. Element
done


Ich hoffe, der Code is richtig so, da ich eigentlich die ksh verwende - wie auch immer, ich glaub die kleine Auflistung oben zeigt, was für Vorteile die Verwendung von arrays haben kann.

Ciao

tr0nix
01.07.2005, 07:08
Jeah, Arrays sind cool. Wenn Du nicht Leerzeichen als Trenner hast, kannst du auch die Variable IFS (Internal Field Seperator) setzen & exportieren um diesen Default zu ändern.

Sprich
export IFS=":"
wuerde den Doppelpunkt als Feld-Seperatoren nehmen. Die Variable solltest du bei Gelegenheit mit "unset" wieder leeren damit Du später keine Probs kriegst mit anderen Tools.