ksh: Sortieren von Arrays

B

buuuurn

Jungspund
Hallo ich bin neu hier und wollte mal so die schnelle Hilfe hier testen.



in dem Array steht folgendes
z.B
[0] = 4.5.3.2
[1] = 2.3.2.1

ich würde gerne aus 2 Arrays inden denne solche Sachen drinnen stehen die kleinere herausfinden

Die zahlen sind Versions nummern. Das problem ist wenn in UNIX bzw. KSH Strings verglichen werden.


2.3.4.5
3.2.1.2

das passt ja .. kleinere zuerst
aber

2.33.2.1
3.2.1.1

aber hier ... leider wird beim operaor '=' auch die länge überprüft


Also nach endlosen Verwirrungen bitte um hilfe:

2 Arrays

a[0]=2.3.2.1
a[1]=2.1.1.1
a[2]=3.1.22.1
.....
b[0]=2.32.1.2
b[1]=32.1.3.4
b[2]=3.4.1.1

Wie überprüfe ich das also jeweils.... stelle 0 mit stell0 ... stelle1 mit stelle 1


ich wollte es so machen:

while [[ $i -le 5 ]]
do
echo "${array1[zahl]}" | awk -F. '{print $i}' >> aja.txt
done
das der awk halt immer stellenweise herauslist also erste zahl bis zum punkt etc..
und dann vergleicht
bitte um eure meinung
 
Hallo

Nur kurzen Denkanstoß als Schnellschuß:
Wie du dein Array durchläufst weisst du ja selbst, deshalb nur ein einzelnes paarweises Vergleichen.
Code:
A=(1.21.30.40.50)
B=(1.2.3.4.5)
#$A[0] sei also größer als $B[0] ->wir sortieren numerisch nach den Feldern 1-5
# -n -k 1,5
#Trennzeichen sei der Punkt -t"."
# -c gibt nix aus, sondern prüft nur
# die Fehlerausgabe leiten wir nach /dev/null
echo -e "${A[0]}\n${B[0]}"|sort -n -t"." -c -k1,5 2>/dev/null && echo sortiert||echo unsortiert
unsortiert
Geht also ohne AWK
Eine Schleife über beide Array-Element drum und Fertig. ;)
HTH
Gruß Wolfgang
 
Suuuuper!

Danke schön .

Eine letzte Frage noch.

Wie seh ich jetzt ob er weiß welches größer bzw. kleiner ist???
 
Hallo

Schau dir mal den Rückgabewert von sort an.

Gruß Wolfgang
 
Er schreibt mir eh sortiert raus. Das passt ehl

Nur ich weiß jetzt halt ned wie ich dem programm sagen kann a bzw b ist größer.

p.s : Falls es verwunderungen gibt hab erst seit letzter woche mit shell angefangen .. :)
 
<bemerkung nebenbei>Bitte gib in Zununft deinen Threads auch sinnvolle Namen, Hilfe will hier im Forum wohl jeder.</bemerkung nebenbei>
 
buuuurn schrieb:
Er schreibt mir eh sortiert raus. Das passt ehl

Nur ich weiß jetzt halt ned wie ich dem programm sagen kann a bzw b ist größer.

p.s : Falls es verwunderungen gibt hab erst seit letzter woche mit shell angefangen .. :)
Betrachte das mal genauer.
Das echo sortiert in meinem Beispiel kommt nur, wenn der vorhergehende Befehl true zurückgibt.-> siehe auch && innerhalb der Befehlsverkettung.
Du kannst dafür also auch eine if then else einbauen.
Andererseits kannst du statt
echo sortiert auch
echo "erster Wert ist groeszer gleich zweiter Wert" sagen.
um genau festzustellen ob Wert1 größer ist oder gleich, könntest du also schon vorher auf Gleichheit testen.
Code:
[b]if [ "${A[0]}" = "${B[0]}" ]; then
 echo gleichgroß;
else
echo -e "${A[0]}\n${B[0]}"|sort -n -t"." -c -k1,5 2>/dev/null && echo "A[0] ist groeszer" ||echo "B[0] ist groeszer"
fi
[/b]

HTH
Gruß Wolfgang
PS Mit dem Titel hat Nemesis natürlich Recht.
 
Ja ok werd ich machen.

Jetzt gibts nur ein problem. Er macht nicht das was du sagst
er sagt mir immer das a0 großer ist

#!/bin/ksh

set -A array
set -A array1

array[0]="6.0.3.40.50"
array1[0]="7.1.3.4.5"
echo -e "${array[0]}\n${array1[0]}" | sort -n -t"." -c -k1,5 2>i.txt && echo "a0 ist groesser" || echo "B0 ist groesser"

und wenn die nummer dann nicht 5 stellen groß ist, muss ich einfach statt fünf zm $l wobei l die länge der ziffern ist, wobei hier wieder die frage ist wie ich das herausbekomme
 
Zuletzt bearbeitet:
Hallo
Dass du mit der ksh arbeitest, sagtest du nicht.
Mein Beispiel bezieht sich auf die bash.
Dort wird ein Array mit A=(wert wert) zugewiesen.
Sorry, eine KSH habe ich hier nicht.
Schau dir mal dein sort an, das könnte/wird sich wahrscheinlich auch von meinem unterscheiden.

Gruß Wolfgang
 
was macht das echo -e?
bzw die 2 beim sort

und dieses \n im echo
 
Zuletzt bearbeitet:
Hab das Topic mal geändert.

Gruss, Xanti

p.s.: @buuuurn man echo
 
was macht das echo -e?
bzw die 2 beim sort

und dieses \n im echo

Lass dir halt nicht alles vorkauen.

Diese Fragen hättest du nach einem kurzen Blick in die Manpage selber beantworten können.
 
ui ein ganz schlauer... dann weißt du ja wo ich die letzten stunden verbracht habe nur werde ich bei unseren man pages auf perl umgelinkt und gott weiß wieso... sonst hätte ich hier auch nicht gepostet

was echo betrifft stehen alle drinnen bis auf -e
 
Ihr habt mir sehr geholfen es gibt nur noch ein problem. er sortiert richtig und es funzt ABER

diese abfrage mit dem echo a0 bzw echo b0 is größer

könnte sein das die operatoren && bzw. || falsch gesetzt sind

echo statement

echo "${array[0]}\n${array1[0]}" | sort -n -t"." -k1,5 2>i.txt && echo "a0 ist groesser" || echo "B0 ist groesser"

ich glaube das er einfach schaut wenn das sortieren funktioniert hat dann nimmt er das erst echo wenn ned das zweite

nur kann ich hier ja ned schaun welches jetzt größer ist
 
Zuletzt bearbeitet:
Hallo
Du hast natürlich Recht, wenn sortiert ist dann ist der erste Wert kleiner gleich.
also ist nur der Ausgabetext von echo zu tauschen.
Fehler meinereiner.
Ich habe hier nämlich mit -r sortiert (reverse) und das nicht mit gepostet.
Aber mit einem Testwert hättest du das sicher selber rausgefunden.

Du siehst, auch ich mache Fehler.
Dehalb sollte man schon verstehen was man da tut.

Gruß Wolfgang
 
So und nun mein letztes problem er sortiert bzw. macht alles perfekt wir er soll

EIN RIESEN DANKENSCHÖN an Wolfgang mit einer kleinen Frag enoch

bei diesem sort -k1,5

wie könnte man das schreiben das es nicht immer bis zur 5 stelle geht
sonder halt solang das array ist??
 
buuuurn schrieb:
So und nun mein letztes problem er sortiert bzw. macht alles perfekt wir er soll

EIN RIESEN DANKENSCHÖN an Wolfgang mit einer kleinen Frag enoch

bei diesem sort -k1,5

wie könnte man das schreiben das es nicht immer bis zur 5 stelle geht
sonder halt solang das array ist??

Du müsstest einfach die größte mögliche Länge ermitteln,
Ist das Array kleiner, haben überzählige Stellen keine Auswirkung.

Gruß Wolfgang
 
Ja hab ich eh gemacht
nur ich er sagt ma das, das er das ned will wenn ich schreib

-k1,$l

wobei l halt die länge ist
 

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

bash: Fehlermeldung und Werte in Array sortieren?

Squid als RPCoHTTPS Proxy für Outlook Anywhere

RUBY: Mehrdimensionale Arrays und Objekte

Wirkliches Includieren mit KSH

Zurück
Oben