Tom: Linux-bash Array sortieren

Hello,

hat einer 'nen Tipp für mich, wie ich ein Array in der bash sortieren lassen kann, ohne selber eine aufwändige Funktion dafür zu schreiben?

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de
  1. Hellihello

    hat einer 'nen Tipp für mich, wie ich ein Array in der bash sortieren lassen kann, ohne selber eine aufwändige Funktion dafür zu schreiben?

    Was ist denn "ein Array"? Wie liegt es vor und wo?

    Dank und Gruß,

    frankx

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

      hat einer 'nen Tipp für mich, wie ich ein Array in der bash sortieren lassen kann, ohne selber eine aufwändige Funktion dafür zu schreiben?

      Was ist denn "ein Array"? Wie liegt es vor und wo?

      Hab es schon hinbekommen.
      Mit einer kleinen Pause und einem Glas Wein kam die Erleuchtung.
      Ich poste es mal etwas verkürzt hier.

      #!/bin/bash

      declare -a result=( 22 15 7 12 404 1 77 )                 ##result als Array deklarieren

      result=( $(echo ${result[*]} | tr ' ' '\n' | sort -n) )   ##Ergebnis sortieren

      echo ${result[*]}                                         ##Ergebnis ausgeben als String

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hellihello

        result=( $(echo ${result[*]} | tr ' ' '\n' | sort -n) )   ##Ergebnis sortieren

        ersetzt die Leerzeichen durch Absätze und sortierst dann. Wusste nich, dass leerzeichensparierte Zahlen ein Array sind, ist aber irgendwie logisch, oder? Bzw. dass das echo eines solchen Arrays einen leerzeichenseparierten Werte-String ergibt.

        Dank und Gruß,

        frankx

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

          result=( $(echo ${result[*]} | tr ' ' '\n' | sort -n) )   ##Ergebnis sortieren

          ersetzt die Leerzeichen durch Absätze und sortierst dann. Wusste nich, dass leerzeichensparierte Zahlen ein Array sind, ist aber irgendwie logisch, oder? Bzw. dass das echo eines solchen Arrays einen leerzeichenseparierten Werte-String ergibt.

          Ich kämpfe mich da auch noch durch.

          declare -a arrayname=( 1 2 3 4 5 6 7 8 )

          legt ein lokales (Namensraum) Array an. mit

          echo ${arrayname[0]}

          kannst Du das erste Element ausgeben. Mit

          echo ${#arrayname[@]}   oder   echo ${#arrayname[*]}

          bekommst Du die Anzahl der Elemente im Array. Ob das nun einen Unterschied macht, ob man * oder @ benutzt für die Ermittlung der Anzahl, habe ich noch nicht herausgefunden. Mit

          echo ${arrayname[@]}

          bekommst Du die Elemente es Arrays als Array ausgegeben. Mit

          echo ${arrayname[*]}

          erhältst Du die Elemente mit Leerzeichen getrennt ausgegeben.
          Ich habe noch nicht herausgefunden, was man bei Elementen macht, die selber ein Leerzeichen enthalten sollen.

          Außerdem kannst Du mit

          unset arrayname[3]

          ein Element aus dem Array entfernen, hier das vierte. Mit

          arrayname=( ${arrayname[*]} )

          kannst Du den Index der Arrays reorganisieren. Es gibt nur Numerische Indexe, die müssen aber nicht geschlossen sein. Du kannst also 1,3,4,5,88,100 als Index benutzen. Dann fehlen eben dazwischen ein paar Elemente. Die sind dann NULL

          Naja, wann man nun ein Leerzeichen machen muss zwischen den einzelnen Steuerzeichen, Operanden und Operatoren und wann es nicht erlaubt ist, ist schon verzwickt genug. Aber enn ich nun an True und False denke, dann wird mir noch schlechter. Im Allgemeinen gilt wohl, dass 0 true und 1 (oder !=0) false ist. Nu n habe ich aber vorhin ein paar Vergleiche angestellt

          echo $(( ${#arrayname[@]} < 4))
          0
          echo $(( ${#arrayname[@]} > 1))
          1

          Das passt doch dann aber nicht dazu ...

          Ich muss also noch viiiiel lesen und üben :-)

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hellihello

            Ich muss also noch viiiiel lesen und üben :-)

            warum aber per bash ein Array erzeugen? Warum zB nicht mit php -f my_script.php?

            Dank und Gruß,

            frankx

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

              warum aber per bash ein Array erzeugen? Warum zB nicht mit php -f my_script.php?

              Dein Gedächtnis ist miserabel :-)
              Nein, manchmal will man etwas einfach in der Shell tun. Wo ist das Problem?
              Fast immer will man etwas *nicht* in PHP erledigen. Wo ist das Problem?

              Freundliche Grüße

              Vinzenz

              1. Hellihello Vinzenz,

                warum aber per bash ein Array erzeugen? Warum zB nicht mit php -f my_script.php?

                Dein Gedächtnis ist miserabel :-)

                Jau, wie gut, dass Du dem nachhelfen kannst.

                Nein, manchmal will man etwas einfach in der Shell tun. Wo ist das Problem?
                Fast immer will man etwas *nicht* in PHP erledigen. Wo ist das Problem?

                Keins, nur das Hantieren mit Arrays fand ich etwas mühsam hier. Aber sinniges Zusammensetzen von Pipes ist ja wirklcih eine kleine Kunst für sich.

                Dank und Gruß,

                Robert aka

                frankx

                --
                tryin to multitain  - Globus = Planet != Welt
            2. Hello,

              warum aber per bash ein Array erzeugen? Warum zB nicht mit php -f my_script.php?

              Gute Frage.
              Ist PHP als CLI ein Ersatz, oder sogar besser, als die BA-Shell selber?

              Das bringt mich auf eine ganze ander Idee: kann ich den PHP-Interpreter als Shell einsetzen in meinem Linux-System?

              Er hat zumindest Unterschiede, was die Ausführbarkeit von Scripten betrifft.
              Der PHP-Interpreter müsste, um ein vollständiger Ersatz für die Shell zu werden, auch noch etliche GNU-Shell-Utils implementieren. Angefangen bei den Filesystembefehlen ls, fdisk, mkfs, sort, ... usw. bis hin zum Pipelining der Befehle. Anfangen müsste man vermutlich bei einem toString-Tool für Arrays. Dann wäre man ggf. schon ziemlich nahe dran.

              Ich denke aber, dass die BA-Shell oder die Korn-Shell zumindest im derzeitigen Entwicklungsstand durch PHP nicht ersetzt werden könnten.

              Ich habe das zusammen mit zwei Freunden (leider beide tödlich verunglückt) zu DOS-Zeiten schon mal versucht, die Command-Shell durch eine eigene zu ersetzen. Das ist auch damals ziemlich gut vorangegangen. Ziel war es einfach, das zur Verfügung stehende DPMI mit seinen möglichen 16MBytes Adressraum verfügbar zu machen für alle Programme. 16MBytes waren zu DOS-Zeiten noch mächtig viel Speicher!

              Liebe Grüße aus Syburg bei Dortmund

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de