34 votes

Pourquoi "sort" ignore-t-il les caractères spéciaux, comme l'astérisque ?

Je pensais que sort trierait les préfixes communs ensemble, mais cela ne se produit pas toujours. Prenez cette entrée par exemple :

AT0S*eightieths
AT0S*eyetooth's
AT*ad
AT*Ad
AT*AD
AT*Eydie
AT*eyed
ATF*adv
ATF*ATV
ATF*edify
ATF*Ediva
ATFKT*advocate
ATFKTNK*advocating
ATFKT*outfought
ATFKTS*advocates
ATHT*whitehead
ATHT*Whitehead
AT*id
AT*I'd
AT*Ito
AT*IUD
ATJ*adage
ATNXNS*attention's
ATNXNS*attenuation's
ATNXNS*autoignition's
AT*oat
AT*OD
AT*outweigh
AT*owed
ATP0K*idiopathic
ATP*adobe
ATT*wighted
ATT*witted
ATT*wooded
AT*UT
AT*Uta
AT*wowed
AT*Wyatt
ATX*atishoo

Après sort je m'attendais à ce que tous les AT* pour finir en un seul morceau mais quand vous passez ces données à travers sort la sortie == entrée. Pourquoi cela ? Je n'ai pas spécifié d'option pour ignorer les caractères non alphabétiques ou autre. Juste sort dict > out .

Ma version de sort vient de coreutils 8.5-1ubuntu3 .

0 votes

Ça marche pour moi. Peut-être un alias quelque part ?

0 votes

Je peux confirmer que j'ai exactement le même problème sous debian, mais avec des virgules, ça me rend fou. Comment trier csvs quand il se comporte comme ça par défaut ?

0 votes

@Owl Utilisez l'outil approprié pour le travail : xsv ou csvkit.

23voto

Zorin Wiseputra Points 11

La définition de LC_ALL=C a rétabli l'ordre de tri traditionnel dans mon cas. Paquet : coreutils Version : 8.5-1ubuntu3

export LC_ALL=C

0 votes

LANG=C fonctionne également. Ce qui m'intrigue : LANG est réglé sur en_US.UTF-8 Pourquoi * Toujours un traitement spécial ?

5 votes

LC_COLLATE est le paramètre qui est spécifique à sort etc.

0 votes

Cela fonctionne pour moi sous Raspbian//Pixel... le problème de l'ignorance des caractères spéciaux me tuait... Merci.

22voto

Reuben L. Points 1022
sort --version-sort filename 

Cela préserve l'ordre naturel des nombres.

4 votes

+1 Cela fonctionne mais pourquoi ? Il n'y a que quelques chiffres à un seul chiffre dans le texte.

2 votes

Fonctionne sans qu'il soit nécessaire de modifier l'environnement, +1

0 votes

@AaronDigulla : Je soupçonne qu'il traite les chaînes de caractères dans le tri de la version comme la manière la plus stupide de trier les choses, donc il ignore les paramètres locaux et ne traite les nombres que d'une manière spéciale.

4voto

Walf Points 354

Pour donner une réponse simple basée sur les commentaires des autres, cela ne change pas votre environnement :

input_program | LC_COLLATE=C sort | output_program

ou

LC_COLLATE=C sort < input_file > output_file

ou des combinaisons de ceux-ci.

0 votes

Pour plus d'informations sur ce qu'est LC_COLLATE et comment le modifier : unix.stackexchange.com/a/361021/26152

2voto

Regis Barbosa Points 39

Version : sort (GNU coreutils) 8.26

Je le fais en ligne :

LANG=C sort FILE

Ou par fonction (modifie le fichier original) :

dosort() { local file="$*"; LANG=C sort ${file} -o ${file}.swp; mv ${file}.swp ${file}; cat ${file} ;}

1voto

user2013 Points 2301

Cela fonctionne comme prévu pour moi (sur cygwin).

sort input > output résulte en

AT\*AD
AT\*Ad
AT\*Eydie
AT\*I'd
AT\*IUD
AT\*Ito
AT\*OD
AT\*UT
AT\*Uta
AT\*Wyatt
AT\*ad
AT\*eyed
AT\*id
AT\*oat
AT\*outweigh
AT\*owed
AT\*wowed
AT0S\*eightieths
AT0S\*eyetooth's
ATF\*ATV
ATF\*Ediva
ATF\*adv
ATF\*edify
ATFKT\*advocate
ATFKT\*outfought
ATFKTNK\*advocating
ATFKTS\*advocates
ATHT\*Whitehead
ATHT\*whitehead
ATJ\*adage
ATNXNS\*attention's
ATNXNS\*attenuation's
ATNXNS\*autoignition's
ATP\*adobe
ATP0K\*idiopathic
ATT\*wighted
ATT\*witted
ATT\*wooded
ATX\*atishoo

Est-ce que sort est aliasé à quelque chose ? essayez \sort

Aussi

La locale spécifiée par l'option affecte l'ordre de tri. Définissez LC_ALL=C pour obtenir l'ordre de tri traditionnel qui utilise les valeurs d'octets natives

1 votes

Pas d'alias. Ce doit être une fonctionnalité spécifique à ubuntu/debian.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X