Banana: Dateiinhalt in einem Array speichern! (Shell)

Hallo Zusammen,

ich bin ziemlich neu in der ganzen Unix und Shell-Materie!(BASH_VERSION=$'2.05.0(1)-release')

Ich würde gerne den Inhalt einer Textdatei (durch Leerzeichen getrennt) in einem Array Wort für Wort abspeichern!

Ich habe aber leider bis jetzt nur herausgefunden, wie ich ein Array "manuell" mit Daten füllen kann, aber das bringt mich ja leider nicht wirklich weiter.

Könnt ihr mir vielleicht bei meinem Problem weiterhelfen?

Vielen Dank!

Gruß Banana

  1. Hellihello

    Ich würde gerne den Inhalt einer Textdatei (durch Leerzeichen getrennt) in einem Array Wort für Wort abspeichern!

    Ich habe aber leider bis jetzt nur herausgefunden, wie ich ein Array "manuell" mit Daten füllen kann, aber das bringt mich ja leider nicht wirklich weiter.

    Könnt ihr mir vielleicht bei meinem Problem weiterhelfen?

    PHP kennt ja explode();

    Was für ein Array denn und was willst du dann damit? Array in der bash?

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Hallo Robert,

      Was für ein Array denn und was willst du dann damit? Array in der bash?

      die bash gabs schon lange vor PHP :-)
      Natürlich hat die bash auch Arrays, dazu hab' ich  mal was gepostet [1]

      Viele Mechanismen, die in $programmiersprache zig Zeilen Code benötigen, lassen sich in der Shell mit einem Einzeiler erledigen, siehe z.B: https://forum.selfhtml.org/?t=168211&m=1097577, Umbenennen von Dateien in einer Verzeichnishierarchie.

      Freundliche Grüße

      Vinzenz

      [1] Dank an Florian, der mir die Archivsuche erspart hat.

      1. danke für die vielen Antworten!

        Ich habe das jetzt folgendermaßen hinbekommen:
        Ich speichere den Inhalt der Textdatei zunächst in eine Variable und diese Variable verwende ich später um das Array zu füllen.

        Wenn ich diesen Code:

        array=($inhalt);

        in die KOnsole eingebe, dann wird mir der Inhalt der Variable in das Array reingespeichert, genau so wie ich es haben wollte.

        Wenn ich jedoch diese Zeile in mein Shell-Skript reinschreibe und dann dieses ausführe bekomme ich folgende Fehlermeldung:

        "TimeBand.sh: syntax error at line 19: `array2=' unexpected"

        Ich dachte immer ich könnte in das Shell-Skript die Befehle so hineinschreiben, wie ich sie auch in die Konsole eintippen würde bis jetzt hatte das auch immer prima geklappt.

        Was mache ich denn falsch?

        Gruß Banana

        1. Hallo Banana,

          Ich speichere den Inhalt der Textdatei zunächst in eine Variable und diese Variable verwende ich später um das Array zu füllen.

          warum liest Du den Inhalt nicht gleich in ein Array ein?

          Wenn ich diesen Code:
          array=($inhalt);
          in die KOnsole eingebe, dann wird mir der Inhalt der Variable in das Array reingespeichert, genau so wie ich es haben wollte.

          Was mache ich denn falsch?

          Du enthältst uns Dein Shellskript vor. Hellsehen kann ich leider nicht.

          Wenn Deine Datei die Daten allesamt in einer Zeile hat (warum eigentlich?), dann kannst Du wie folgt vorgehen:

          #---------------------------------------------------

          Datendatei (eine einzige Zeile)

          #---------------------------------------------------
          Alpha Beta Gamma Delta

          #---------------------------------------------------

          Shellskript:

          #---------------------------------------------------
          #!/bin/bash
          declare -a liste                   # Lege eine eine Arrayvariable an

          Einlesen der aus einer einzigen Zeile bestehenden Eingabedatei in das Array

          Die Option -a von read sorgt dafür, dass jedes einzelne Wort einem

          Arrayelement zugewiesen wird.

          Die Eingabeumlenkung mit

          #    < /path/to/file (durch den korrekten Pfad zur Datendatei ersetzen :-))

          sorgt dafür, dass statt von der Standardeingabe aus der Datei gelesen wird

          read -a liste < /path/to/file      #
          Diese Zeile ist eigentlich alles,
                                             # was Du benötigst

          Kontrollausgabe aller Arrayelemente in einer Schleife

          for i in ${liste[*]};              # Durchlaufe alle Arrayelemente
          do
              echo $i;                       # und gebe sie zeilenweise aus
          done

          #---------------------------------------------------

          Ausgabe:

          #---------------------------------------------------
          Alpha
          Beta
          Gamma
          Delta

          Freundliche Grüße

          Vinzenz

      2. Hellihello Vinzenz,

        die bash gabs schon lange vor PHP :-)
        Natürlich hat die bash auch Arrays, dazu hab' ich  mal was gepostet [1]

        Ich weiß, aber ich PHP kann ich mehr als bash:

        Viele Mechanismen, die in $programmiersprache zig Zeilen Code benötigen, lassen sich in der Shell mit einem Einzeiler erledigen, siehe z.B: http://forum.de.selfhtml.org/my/?t=168211&m=1097577, Umbenennen von Dateien in einer Verzeichnishierarchie.

          
        $file_as_array = explode(" ",file_get_contents("filename"));  
        
        

        oder so ähnlich. Ich dachte auch, "explode" könne bei der etwaigen Suche helfen.

        Dank und Gruß,

        Robert aka

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. Hallo Robert,

          $file_as_array = explode(" ",file_get_contents("filename"));

          
          >   
          > oder so ähnlich. Ich dachte auch, "explode" könne bei der etwaigen Suche helfen.  
            
          naja, ich finde explode() eigentlich unmöglich. Das heißt anderswo split ...  
            
            
          Freundliche Grüße  
            
          Vinzenz
          
      3. Hallo Vinzenz.

        [1] Dank an Florian, der mir die Archivsuche erspart hat.

        Google war sehr hilfsbereit. ;)

        Servus,
        Flo

  2. Hallo Banana.

    Dieser Archiv-Thread schaut ganz brauchbar aus.

    Die Frage ist aber auch, was du eigentlich erreichen willst; vielleicht benötigt man dazu ja gar kein Array?

    Servus,
    Flo