Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Index de tri

5 réponses
Avatar
danrob
Pour un Applescript je cherche a trier un tableau via do shell script
qui donne comme résultat l'index de tri et non le tableau trié.
La commande 'sort' n'a pas d'option pour ça.
Y-a-t-il une autre commande, rien trouvé dans man ?

5 réponses

Avatar
patpro ~ patrick proniewski
In article <1j501y3.ug8wea1g5y7phN%,
(Daniel Robillard) wrote:

Pour un Applescript je cherche a trier un tableau via do shell script
qui donne comme résultat l'index de tri et non le tableau trié.
La commande 'sort' n'a pas d'option pour ça.
Y-a-t-il une autre commande, rien trouvé dans man ?



ce que tu cherches à obtenir c'est donc la liste des numéros de ligne
dans l'ordre obtenu après le tri. C'est bien ça ?

J'ai un bout de solution, quick&dirty :

soit une table /tmp/table :

$ cat /tmp/table
B 123 A 789 /
C 456 +

tu dois ajouter un numéro de ligne :

$ awk '{print NR" "$0}' /tmp/table
1 B 123 2 A 789 /
3 C 456 +

tu dois ensuite faire ton tri, par exemple sur la colonne 2 (B,A,C) :

$ awk '{print NR" "$0}' /tmp/table | sort --key=2
2 A 789 /
1 B 123 3 C 456 +

Pour finir, tu ne veux afficher que la liste des numéros de ligne :

$ awk '{print NR" "$0}' /tmp/table | sort --key=2 | awk '{print $1}'
2
1
3

Si tu tries sur la colonne de nombres :

$ awk '{print NR" "$0}' /tmp/table | sort --key=3 | awk '{print $1}'
1
3
2

et sur la colonne de signes :

$ awk '{print NR" "$0}' /tmp/table | sort --key=4 | awk '{print $1}'
3
2
1


patpro

--
A vendre : KVM IP 16 ports APC
http://patpro.net/blog/index.php/2008/01/12/133
Avatar
danrob
patpro ~ patrick proniewski wrote:

ce que tu cherches à obtenir c'est donc la liste des numéros de ligne
dans l'ordre obtenu après le tri. C'est bien ça ?

J'ai un bout de solution, quick&dirty :



Merci mais trop dirty pour moi, je veux garder les mains propres ;-)

En fait j'ai ce tri en Applescript mais avec plus de 10000 lignes ça
rame trop.

J'ai trouvé une solution avec un tri direct.
Toutefois y'a un truc bizarre qui me bloque.
Si mes données sont directement fournies en constante dans une variable
le tri est bon.
Par contre si elles sont générées à partir de champs de iView MediaPro
la sortie est identique à l'entrée.
Que le texte soit en Unicode ou pas.

do shell script "sort -f -t " & return & " " & TempFile

Mac OS 10.4.11, Applescript 1.10.7
Avatar
danrob
Daniel Robillard wrote:

Toutefois y'a un truc bizarre qui me bloque.
Si mes données sont directement fournies en constante dans une variable
le tri est bon.
Par contre si elles sont générées à partir de champs de iView MediaPro
la sortie est identique à l'entrée.



J'ai trouvé.

Quand je mets le texte en constante il s'avère que le saut de ligne est
LF (Ascii 10).
Or dans la commande 'sort' le délimiteur de champ est 'return" soit CR
(Ascii 13) et pourtant le tri est fait.

Si j'utilise LF pour générer le texte par programme et CR comme
séparateur de champs pour 'sort' alors le tri fonctionne.

Viscieux n'est-il pas ?
Avatar
francois.jacquemin
Daniel Robillard wrote:

Pour un Applescript je cherche a trier un tableau via do shell script
qui donne comme résultat l'index de tri et non le tableau trié.
La commande 'sort' n'a pas d'option pour ça.
Y-a-t-il une autre commande, rien trouvé dans man ?


essaye par là :
<http://www.scriptweb.org/>
--
F. J.
Avatar
danrob
François Jacquemin wrote:

<http://www.scriptweb.org/>



Problème résolu.
Merci pour le lien, je le garde au chaud.