Linux-bash Array sortieren
Tom
- programmiertechnik
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
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ß,
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
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ß,
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
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ß,
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
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
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