Anzeige:
Ergebnis 1 bis 3 von 3

Thema: [bash] Textdatei zeilenweise auslesen und an Variablen übergeben

  1. #1
    Saedelaere
    Gast

    [bash] Textdatei zeilenweise auslesen und an Variablen übergeben

    Hi,

    erst einmal HALLO an alle. Bin neu hier im Forum.

    Leider kenne ich mit shell Programmierung unter Linux noch nicht besonders gut aus.

    Ich würde gerne aus einer Textdatei die wie folgt aussieht

    Code:
    ARD E5
    ZDF E6
    SWR-BW E7
    ...
    den Inhalt per shell Script auslesen. Dabei soll zum Beispiel ARD in der Variable sender1 und ZDF in der Variable sender2 usw. gespeichert werden. Erschwerend kommt noch hinzu, dass ich die Infos in der 2. Zeile ebenfalls gerne in einer Variablen hätte. Also E5 in channel1 E6 in channel2 usw..

    Ich habe momentan keine Ahnung wie ich da realisieren könnte, bin aber natürlich gerne bereit auch noch was zu lernen, deshalb erwarte ich nicht, dass man mir hier ein fertiges Script liefert. Ein paar Denkanstöße wären schon etwas. Danke

    Vlg

    Saedelaere

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    wenn es nicht unbedingt eigene Variablen pro Zeile sein sollen, kannst Du in der bash Arrays benutzen:
    Code:
    i=0
    while read s k; do
      sender[$i]=$s
      kanal[$i]=$k
      i=`expr $i + 1`
    done <liste
    Herausholen kannst Du die Daten dann wieder mit:
    Code:
    i=`expr $i - 1`
    for c in `seq 0 $i`; do
      echo ${sender[$c]} ${kanal[$c]}
    done
    Jan

    EDIT: Eigene Variablen gehen natürlich auch, aber das ist deutlich unübersichtlicher und schlechter auszuwerten:
    Code:
    i=1
    while read s k; do
      eval sender`echo $i`=$s
      eval kanal`echo $i`=$k
      i=`expr $i + 1`
    done <liste
    Auswerten dann so:
    Code:
    i=`expr $i - 1`
    for c in `seq 1 $i`; do
      s=`eval echo $sender\`echo $c\``
      k=`eval echo $kanal\`echo $c\``
      echo $s $k
    done
    Das ist deshalb so umständlich, weil Du ja Variablennamen dynamisch erzeugen musst.
    Geändert von jan61 (08-11-2007 um 23:05 Uhr)

  3. #3
    Saedelaere
    Gast
    So danke erst mal für die Hilfe und Sorry, dass ich moch erst jetzt melde.

    Das ganze hat sich aber insofern erledigt, da ich auf tcl umgestiegen bin.

    Der entsprechende code geht dort wie folgt:

    Code:
    set file test.txt
    set f [open $file r]
    set i 1
    while {[gets $f line]!=-1} {
    foreach {kanal channel} [split $line] {
    set kanalid($i) $kanal
    set kanalcall($i) $channel
    }
    incr i
    }
    Damit werden dann die Sender und der entsprechende Channel in Variablen angelegt. Das ganze geht natürlich nur, wenn der Sendername ohne Leerzeichen geschrieben wurde. Also ARD sollte nicht Das Erste heißen.

    Vlg
    Saedelaere

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •