Question

J'ai un fichier a.csv avec un contenu similaire à ci-dessous

a,b,c
a  ,aa,  a
a b, c, f
a , b, c
a b a b a,a,a
a,a,a
a aa ,a , t

J'essaie de le trier en utilisant sort -k1 -t, a.csv Mais cela donne les résultats suivants

a,a,a
a  ,aa,  a
a aa ,a , t
a b a b a,a,a
a , b, c
a,b,c
a b, c, f

Ce qui n’est pas le tri réel dans la 1ère colonne. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Vous devez également spécifier la position finale sur 1:

sort -k1,1 -t, a.csv

Autres conseils

Essayez ceci: sort -t, -k1,1 a.csv

L'homme suggère qu'en omettant le champ de fin, il trie tous les caractères commençant au champ n jusqu'à la fin de la ligne:

-k POS1[,POS2]'
     The recommended, POSIX, option for specifying a sort field.  The
     field consists of the part of the line between POS1 and POS2 (or
     the end of the line, if POS2 is omitted), _inclusive_.  Fields and
     character positions are numbered starting with 1.  So to sort on
     the second field, you'd use `-k 2,2' See below for more examples.

Essayez plutôt ceci:

sort -k 1,1 -t , a.csv

sort lit -k 1 comme suit: "trier à partir du premier champ" - défiant ainsi efficacement le point de passer l'argument en premier lieu.

Ceci est documenté dans la page de manuel de tri et mis en garde dans la section Exemples: <

  

Triez numériquement le deuxième champ   et résoudre les liens en triant   alphabétiquement sur les troisième et quatrième   caractères du champ cinq. Utilisez `: 'comme   le délimiteur de champ:

     

$ sort -t: -k 2,2n -k 5.3,5.4

     

Notez que si vous aviez écrit -k 2    -k 2,2 , trier aurait utilisé tous les   personnages commençant à la seconde   champ et s'étendant jusqu'à la fin de la   ligne en tant que clé numérique principale. Pour   la grande majorité des applications,   traiter des clés couvrant plus d'un   champ comme numérique ne fera pas ce que vous   attendre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top