commande de tri sous Unix avec tri numérique

10

J'ai file1:

"$lvl=57"
"$lvl=20"
"$lvl=48"
"$lvl=17"
"$lvl=58"

File2 je veux:

"$lvl=17"
"$lvl=20"
"$lvl=48"
"$lvl=57"
"$lvl=58"

Type de fichier essentiellement numérique 1.

yisha
la source
Lorsque je lance un Unix simple sortsur votre File1, sans aucune option, j'obtiens votre File2. Que faites-vous différemment? Que laissez-vous en dehors de cette question?
Scott

Réponses:

17

J'aime -V --version-sort: il se comporte très bien pour de nombreuses situations mêlant chaînes et nombres

sort -V

J'utilise cette option très souvent ...

Dans une certaine direction, ls -vpour le tri des versions ls.

JJoao
la source
10

Vous devez dire sort -nde trier la pièce après =:

sort -t = -k 2n
Stéphane Chazelas
la source
Je regardais récemment ce ^^. Mais encore un Q. Que faire -k2n? Est-ce lié au tri numérique? Merci.
αғsнιη
2
@KasiyA -kdéfinit une clé de tri. Voir la page de manuel pour plus de détails. -k2ndéfinit une clé de tri commençant au deuxième champ et se terminant à la fin de la ligne et en fait une clé de tri numérique.
Stéphane Chazelas
0

utiliser le tri:

sort -n file1 > file2

-n, --numeric-sort
comparer selon la valeur numérique de la chaîne

 sort -g file1 > file 2

-g, --general-numeric-sort

Hackaholic
la source
3
Non, toutes ces lignes ont le même classement sort -ncar elles ne commencent pas par un nombre. La raison pour laquelle il les trie est le tri en ligne de dernier recours (lexicalement et non numériquement) effectué pour les lignes avec le même classement. Cela trierait "$lvl=17"avant "$lvl=2".
Stéphane Chazelas
@ StéphaneChazelas merci de l'avoir signalé.
Hackaholic
Pour paraphraser, -net -gsont redondants ici car l'entrée n'est pas numérique. Cette réponse est donc trompeuse, d'où le downvote (notez également que -gles options longues sont spécifiques à GNU).
Stéphane Chazelas
mais -g est un bon tri numérique général
Hackaholic
C'est toujours pour trier les valeurs numériques, la différence avec -nest que ce n'est pas limité aux entiers décimaux. Cela serait toujours trié "$lvl=17"auparavant "$lvl=2"dans le cadre du tri de dernier recours.
Stéphane Chazelas
0

J'ai trouvé que, vous venez de courir sort -h, cela fonctionnera. Ils l'appellent --human-numberic-sort.

sort -h file1 > file2
vincent pham
la source
-1

sort -nc'est ce que vous voulez utiliser. Il trie comme nous trions les nombres.sort -k 2 -n file1

Cosmo
la source
2
Mais l'OP veut trier par ordre croissant, ce qui est le défaut. Pourquoi proposez-vous l'ordre inverse?
G-Man dit `` Réinstalle Monica '' le
ce qui précède est correct lorsque les champs sont séparés par des tabulations ou des espaces et ne fonctionnera pas dans le cas d'OP.
αғsнιη