Variable oder Array nach Schleifendurchlauf

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von elwood, 26.07.2006.

  1. elwood

    elwood Grünschnabel

    Dabei seit:
    14.05.2004
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo zusammen,
    ich hab vor einiger Zeit ein Skript geschrieben (unter AIX), dass aus einer Datei Werte ausliest und in zwei Arrays schreibt.
    Das selbe Skript läuft nun unter Linux (SuSe) nicht mehr. Das Array ist innerhalb der Schleife gefüllt, sobald die Schleife komplett durchlaufen wurde, ist das Array leer.

    Code:
    i=0
    cat /var/temp/datei.txt | while read line
    do
          myArr[$i]=`echo $line | awk 'BEGIN{FS=":"}{print $2}'`
          i=`expr $i + 1`
        #Debugausgaben
          echo "Counter $i"      
          echo $i                    #Funktioniert
          echo "Arrayinhalt:"
          echo ${myArr[$i]}     #Funktioniert
    done      #Schleifenende
    
    echo $i                 # $i ist jetzt leer
    echo ${myArr[0]}  # Das Array ist jetzt auch leer
    
    
    Ich muss doch in einer Schleife eine Variable oder ein Array füllen können, um damit nachher weiter zu arbeiten.
    Kann mir da jemand helfen?

    gruß
    elwood
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. hmhweb

    hmhweb Mitglied

    Dabei seit:
    29.11.2004
    Beiträge:
    46
    Zustimmungen:
    0
    Hallo elwood,
    diese Beobachtung habe ich auch schon so gemacht:
    Daraufhin habe ich mich vom Konstrukt
    Code:
    cat /var/temp/datei.txt | while read line
    do
    :
    done
    
    verabschiedet und folgenden umständlichen weg benutzt:
    Code:
    lines=`cat file | wc -l`
    for z in `seq 1 $lines`; do
         line=`sed -n ${z}p file `
         for s in `seq 1 9` ; do
              eval array_${z}_${s}=`echo $line | cut -f$s m-d" " `
         done
    done
    
    Dann kann man außerhalb der for-Schleifen auf das Array zugreifen.
    Ist vielleicht nicht besonders elegant, funktionierte aber bei meinem
    Textfile mit 9 Spalten gut.
    Habe aber keine Ahnung, warum das mit der while-Schleife nicht geht.
    Vielleicht kann das mal jemand erklären ?

    Hoffe, es hilft !
    hmh
     
  4. elwood

    elwood Grünschnabel

    Dabei seit:
    14.05.2004
    Beiträge:
    4
    Zustimmungen:
    0
    Danke hmhweb,
    das probier ich mal aus.
    Ich hab inzwischen auch ein bisschen rumgebastelt und dabei ist mir auch aufgefallen, dass das Problem bei for-Schleifen nicht auftritt.
    Muss wohl wirklich an dem "while read line"-Konstrukt liegen.
    Wie gesagt unter AIX hats funktioniert.
    Vielleicht hat ja wirklich jemand eine Lösung. Wäre echt gut.

    gruß
    bjoern
     
  5. #4 derderlebt, 26.07.2006
    derderlebt

    derderlebt Grünschnabel

    Dabei seit:
    25.07.2006
    Beiträge:
    4
    Zustimmungen:
    0
    read liest von stdin
    cat ...|... ist ein kommando das nicht in der shell direckt läuft deßhalb sind die Variablen danach auch leer
    lass doch alles inder shell direct laufen z.b:
    Code:
    i=0
    {while read line
    do
          myArr[$i]=`echo $line | awk 'BEGIN{FS=":"}{print $2}'`
    
        #Debugausgaben
          echo "Counter $i"       #Funktioniert
          echo "Arrayinhalt:"${myArr[$i]}     #Funktioniert
          i=`expr $i + 1`
    done      #Schleifenende
    }< /var/temp/datei.txt
    echo $i                 # $i ist jetzt nicht mehr leer
    echo ${myArr[0]}  # Das Array ist jetzt auch nicht leer
    gruss bernd
    Registrierter Linux User: #291395 bei http://counter.li.org
     
  6. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Code:
    ... 
         myArr[$i]=`echo $line | awk 'BEGIN{FS=":"}{print $2}'`
          i=`expr $i + 1`
        #Debugausgaben
          echo "Counter $i"      
          echo $i                    #Funktioniert
          echo "Arrayinhalt:"
          echo ${myArr[$i]}     #Funktioniert
    ...
    
    ich bezweifle, dass die Ausgabe von ${myArr[$i]} funktioniert, jedenfalls nicht bei der Reihenfolge :devil:
     
  7. #6 Wolfgang, 26.07.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Um einen Dateiinhalt *zeilenweise in ein Array zu bekommen , geht es recht einfach. Das sollte mit bash und ksh gehen.
    *zeilenweise: Meint, dass jedes Element eine komplette Zeile enthält.
    Code:
    #Testfile erzeugen mit Leerzeichen pro Zeile.
    $ for i in {1..30}; do echo "Zeile $i">>test; done
    #Array fuellen
    $ A=($(cat test));
    $ echo Das Array hat ${#A[*]} Elemente
    das Array hat 30 Elemente
    
    #Alles einzeln abarbeiten
    for Element in "${A[*]}"; do
    echo $ELEMENT;
    done
    Zeile 1
    Zeile 2
    Zeile 3
    Zeile 4
    Zeile 5
    Zeile 6
    Zeile 7
    Zeile 8
    Zeile 9
    Zeile 10
    Zeile 11
    Zeile 12
    Zeile 13
    Zeile 14
    Zeile 15
    Zeile 16
    Zeile 17
    Zeile 18
    Zeile 19
    Zeile 20
    Zeile 21
    Zeile 22
    Zeile 23
    Zeile 24
    Zeile 25
    Zeile 26
    Zeile 27
    Zeile 28
    Zeile 29
    Zeile 30
    $ for i in $(seq 0 29); do 
    A[$i]="Neue Zeile mit Index $i";
    done
    $ echo ${A[0]}
    Neue Zeile mit Index 0
    
    ;)

    Alles recht unkompliziert.

    Gruß Wolfgang
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema: Variable oder Array nach Schleifendurchlauf
Besucher kamen mit folgenden Suchen
  1. bash array befüllen

Die Seite wird geladen...

Variable oder Array nach Schleifendurchlauf - Ähnliche Themen

  1. Screen output in variable oder datei

    Screen output in variable oder datei: Hallo Unixvoard-Nutzer :winke:, Ich habe in screen eine konsole y offen und eine konsole x im hintergrund. Ich bin in konsole y und möchte an...
  2. [OpenOffice Calc] variable Schrift- oder Kästchenfarbe

    [OpenOffice Calc] variable Schrift- oder Kästchenfarbe: Hallo Ich habe eine Tabelle mit variablen Zahlenwerten. Wenn diese < 0 sind soll die Schrift- oder Kästchenfarbe rot werden, wenn sie darüber...
  3. Linux 4.5 will UEFI-Variablen besser schützen

    Linux 4.5 will UEFI-Variablen besser schützen: Das Löschen bestimmter UEFI-Variablen kann manche Rechner nicht mehr startbar machen. Das kommende Linux 4.5 ergreift Maßnahmen dagegen, die im...
  4. Wie komme ich an den Inhalt des Inhalts einer Variable?

    Wie komme ich an den Inhalt des Inhalts einer Variable?: Hallo Zusammen, ich möchte meine Buildumgebung vereinfachen und besser zu automatisieren. Ein Skript schreibt Pfade in die env und diese...
  5. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...