|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 187 ![]() |
Bonjour et au secours,
je cherche depuis plusieurs heures et n'arrive pas à trouver comment faire un tri numérique Je voudrais trier par ordre croissant les entiers des 2 premières colonnes (séparées par des virgules): Code :
Code :
Oumgourje? J'utilise une version assez ancienne (RedHat 3), sans particularité linguistique: Code :
)jack( |
||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
c'est parce que tu trie l'ensemble des colonnes 1 et 2 que le résultat est bizare.
Code :
sort --field-separator="," -n k 1,1 fichier vires ton cat inutile pour voir si c'est pas lui qui provoque un problème d'interprétation ... |
|
|
00
|
|
|
#3 | ||||
|
Membre Expert
![]() |
Il faut définir les 2 clés séparément :
Code :
Edit : pour être précis, si tu fais -k1, alors il prend la clé de la position 1 jusqu'à la fin de la ligne, si tu fais -k1,2 alors la clé contient les positions 1 et 2 ensemble, et j'ai l'impression qu'avec -n sort ignore tout simplement les caractères non numériques : 2,2 devient 22 et 1,7 devient 17 etc comme on le voit ici : Code :
|
||||
|
|
10
|
|
|
#4 | |||||||||
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 187 ![]() |
Bon, ben déjà, merci d'avoir répondu aussi rapidement!
Citation:
Je veux un tri majeur sur la première colonne et, lorsque la première ne discrimine pas, c'est-à-dire lorsque les valeurs de la première colonne sont identiques, je veux un tri sur la 2ème colonne. Citation:
Code :
Citation:
Code :
Et, en plus, dans mon code, ce ne serait pas bienvenu car le pseudo fichier "toto" est la sortie d'un pipe que je veux justement trier en mémoire avant de le stocker dans un fichier (bon, d'accord, ce ne serait pas un gros fichier et je pourrais le supprimer ensuite (mais, de toute façon, ça ne change rien au résultat!)). Entre-temps, j'ai continué mes investigations et penche plutôt pour un problème linguistique, car si je remplace la virgule par un autre séparateur, comme une virgule suivie d'une espace ou un simple point-virgule, ça marche enfin! Code :
Au moins, j'ai un contournement qui marche! si personne ne trouve mieux... )jack( |
|||||||||
|
|
10
|
|
|
#5 | |||
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 187 ![]() |
Citation:
Et ça marche! Merci beaucoup! J'ai cru que j'allais devenir chèvre, si ce n'était déjà fait... )jack( |
|||
|
|
10
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
le cat faut le virer de toute façon, non pas parce que ca perturbe mais parce que c'est inutile et que l'pipe abusif .... etc...Etc.... on va pas revenir sur l'UUoC
|
|
|
10
|
|
|
#7 | |
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 187 ![]() |
Citation:
Le "cat" que j'ai mis ici, c'était juste pour un exemple. |
|
|
|
01
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
même dans ton exemple il sert à rien j'ai bien dit à rien !
![]() Code :
sed -e 's:,:;:' fichier_d_exemple | sort --field-separator=';' -n -k 1 -n -k 2 | sed -e 's:;:,:' |
|
|
00
|
|
|
#9 | |||||||
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 187 ![]() |
[HS]Oops!!! Les joies de Windows ! Je n'ai pas pu finir mon post précédent car j'avais perdu mon clavier, mais pas ma souris! A chaque appui d'une touche, le PC ne faisait qu'un petit bip (un peu comme lorsqu'on fait C-s (Xoff) sous unix et qu'on remplit le buffer d'input). Bref, le temps que je sauve mes fichiers sous emacs (à la souris, quand on n'a pas l'habitude, c'est pas rapide!), que je reboote, que je relance tout le bazar, me revoili...[/HS]
[TROLL UUoC] Citation:
J'ai bien entendu que tu as bien dit "à rien"! Du point de vue strictement informatique, je suis complètement d'accord avec toi que le "cat" ne sert à rien, mais (car il y a un "mais"), du point de vue interaction entre l'ordinateur et celui qui tape (ou qui lit) le programme (moi, en l'occurrence), il en va tout autrement: le "cat" m'est réellement utile (à moi-même, en personne (et peut-être à d'autres)). En effet, il me permet d'avoir un code plus lisible (pour moi) et plus pratique à remanier. Par exemple, si je veux transformer: Code :
sort --field-separator=';' -n -k 1 -n -k 2 fichier_d_exemple | sed -e 's:;:,:' Code :
sed -e 's:,:;:' fichier_d_exemple | sort --field-separator=';' -n -k 1 -n -k 2 | sed -e 's:;:,:' Code :
Code :
Cela dit, dans le bout de code que j'essayais de mettre au point (dont voici une partie), il n'y a pas de "cat", mais juste un pipe. Il s'agit d'une dizaine de cartes produisant en continu, de manière à peu près synchrone, des données qu'on souhaite regrouper triées dans une seule ligne: Code :
BTW, l'inconvénient de ce style d'écriture (avec backslash + return), c'est que je n'arrive pas à mettre de commentaires entre les lignes :-( si quelqu'un a une solution, ça m'intéresse! En tout cas, merci à tous pour le coup de main! )jack( |
|||||||
|
|
01
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 070 ![]() |
Citation:
|
|
|
|
10
|
|
|
#11 | |
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 187 ![]() |
Citation:
Je ne cherchais plus vraiment, mais, au moins, maintenant, c'est clair: je sais que je peux arrêter de chercher définitivement... à moins qu'on nous introduise un commentaire qui ne finit pas par une fin de ligne, par exemple #< ceci est un commentaire de sept mots >#, sous réserve que quelqu'un s'amuse à modifier le shell en conséquence... Merci N_BaH )jack( |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com