• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Datei mit Trennzeichen in Variablen aufteilen

sphings

Member
Hallo,

ich hab ein kleines Problem,

ich muss eine Datei mit Trennzeichen in Variablen aufteilen.
Die Datei sieht so aus:

Code:
Text;Text;Text;Text;Text.....Text
Text;Text;Text;Text;Text.....Text
Text;Text;Text;Text;Text.....Text

Alles soll immer in eine eigene Variable....
und das aber auch nur Zeilenweise.

Das Zeilenweise auslesen ist klar
Code:
while read DATEIINHALT; do

Aber wie bekomm ich das aus der Variablen DATEIINHALT dann weiter aufgeteilt in:
$TEXT1
$TEXT2
usw
 

pft

Advanced Hacker
schau dir mal awk kann bzw gawk. ideal dafür geeignet.

Du mußt nur das Trennzeichen auf ";" setzen, dann landen die Textteile in Variablen $1, $2...

Verarbeitet wid immer eine Zeile.
 
OP
S

sphings

Member
pft schrieb:
schau dir mal awk kann bzw gawk. ideal dafür geeignet.

Du mußt nur das Trennzeichen auf ";" setzen, dann landen die Textteile in Variablen $1, $2...

Verarbeitet wid immer eine Zeile.

OK erster Versuch hat nicht funktioniert ...

Code:
gawk: Fatal: Kann Quelldatei '085#' nicht zum Lesen öffnen (Datei oder Verzeichnis nicht gefunden).

versucht mit

Code:
gawk -F ";" -f $DATEIINHALT


___________________________________
Edit

ok ich habs ;)

Code:
TEXT1=$(echo ${DATEIINHALT} | awk -F ";" '{print $1}')
TEXT2=$(echo ${DATEIINHALT} | awk -F ";" '{print $2}')
TEXT3=$(echo ${DATEIINHALT} | awk -F ";" '{print $3}')
TEXT4=$(echo ${DATEIINHALT} | awk -F ";" '{print $4}')

geht bestimmt noch eleganter aber es tut seien Zweck :)
 

pft

Advanced Hacker
auch wenn es als unfein gilt in "gelöste" threads zu posten:

versuch es mal mit
Code:
awk 'BEGIN{FS=";"}{print $1 $2 $3 $4}' datei
wobei der print-Befehl anzupassen ist.

Das readsline is dabei schon mit abgehandelt. Da du die Elemente dann innerhalb awk schon in Variablen ($1, $2, ...) hast wäre es evtl geschickt, weitere Teile deiner Aufagbe in awk ab zu wickeln, statt zurück auf die Shell-Ebene zu gehen.

Du hast ja nicht verraten was Du eigentlich die Aufagbe ist. awk ist aber verdammt mächtig - für den der es mag.
 

regexer

Advanced Hacker
... und es geht auch mit der bash:
Code:
prompt> IFS=';'
prompt> echo "1;2;3" | while read a b c ; do echo A$a B$b C$c; done
A1 B2 C3
prompt>
 
Oben