Tri 'sort' croissant puis décroissant

Résolu
Tom22 -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
je n'arrive pas à double-trier un fichier ascii (2 colonnes de nombres) de façon normale puis inversée, càd trier en croissant la colonne 1, puis en décroissant sur la 2e colonne. Exemple simple, fichier tutu.asc:
7 4000
8 200
8 1500
8 3000
11 4000

et je veux ceci:
7 4000
8 3000
8 1500
8 200
11 4000

j'ai essayé plein de choses:

la commande "cat tutu.asc | sort -n -k 1 -k 2" me trie la première colonne croissante (ok), puis la seconde de façon croissante aussi (pas ok)

la commande "cat tutu.asc | sort -n -k 1 -k 2 -r" me trie la seconde colonne décroissante (ok), mais la première est aussi décroissante (pas ok)

la commande "cat tutu.asc | sort -n -k 1" me trie la première colonne croissante (ok), mais à la seconde est mal triée: les couple du 8 sont dans l'ordre 1500, 200 puis 3000 (pas ok)

Des idées ?
Thanx !

3 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut;
tmpfs]$ cat fich
7 4000
8 200
8 1500
8 3000
11 4000
[tmpfs]$ sort -n -k1 -k2.1rn fich
7 4000
8 3000
8 1500
8 200
11 4000
[tmpfs]$
;-))
4
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Pas si incompréhensible que ça :
       +POS1 [-POS2]
              Indiquer un champ à utiliser comme clé de tri pour chaque ligne.
              Le champ consiste en une portion de de ligne débutant à la posi-
              tion POS1, et s'étendant jusqu'à POS2 non-inclue (ou jusqu'à  la
              fin de la ligne si POS2 n'est pas mentionnée). Les positions des
              champs et des caractères sont numérotées à partir de 0.

       -k POS1[,POS2]
              Une autre syntaxe possible pour indiquer les clés de  tri.   Les
              positions  des champs et des caractères sont numérotées à partir
              de 1.

       Une position est de la forme f.c,  où  f  est  le  numéro  du  champ  à
       utiliser,  et c le numéro du premier caractère depuis le début du champ
       (avec +pos) ou depuis la fin du champ précédent (avec -pos).  La partie
       .c  de  la  position peut être omise, auquel cas le caractère considéré
       est le premier du champ.  Si l'option -b  est  choisie,  la  partie  .c
       d'une  spécification de champ est comptée à partir du premier caractère
       non-blanc du champ (pour +pos) ou à partir du  premier  caractère  non-
       blanc suivant le champ précédent (pour -pos).

       Un  argument  +pos  ou  -pos  peut également avoir un préfixe constitué
       d'une des lettres d'option Mbdfinr auquel cas les options  globales  ne
       s'appliquent  pas  à ce champ.  l'option -b peut être attachée indépen-
       damment aux parties +pos ou -pos d'une spécification de champ. Si  elle
       est  héritée  d'une option globale, elle s'appliquera aux deux parties.
       Si une option -n ou -M est utilisée,  ceci  implique  que  l'option  -b
       s'applique  aux  deux  spécifications  +pos  et -pos.  Les clés peuvent
       s'étendre sur plusieurs champs.
;-))
1
Tom22
 
Super ! c'est exactement ça. Je viens de relire le man de sort, et c'est vrai qu'il y a un chariabia incompréhensible sur "POS is F[.C][OPTS] etc etc..."
Maintenant je suis certain : les concepteurs d'Unix/Linux ont tout fait rendre les pages de man illisibles au commun des utilisateurs ! C'est une secte ! :-))
0