Posez votre question Signaler

Tri 'sort' croissant puis décroissant [Résolu]

Tom22 - Dernière réponse le 24 sept. 2008 à 10:53
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 !
Lire la suite 

Tri 'sort' croissant puis décroissant »

3 réponses
Réponse
+1
moins plus
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]$
;-))
Ajouter un commentaire
Réponse
+1
moins plus
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.
;-))
Ajouter un commentaire
Réponse
+0
moins plus
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 ! :-))
Ajouter un commentaire
Ce document intitulé « tri 'sort' croissant puis décroissant » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?