J'ai un fichier séparé par des virgules qui ressemble à ceci:
100,00869184
6492,8361
1234,31
200,04071
Je veux utiliser sort
pour trier ce fichier numériquement par la première colonne uniquement .
Résultat désiré:
100,00869184
200,04071
1234,31
6492,8361
Comment puis-je y parvenir en utilisant le tri? Il semble que les virgules soient traitées comme des milliers de séparateurs au lieu de délimiteurs, même lorsque je les appelle comme telles.
Les deux sort -t',' -n
et sort -t',' -nk1'
donnez-moi ceci:
1234,31
200,04071
6492,8361
100,00869184
Trier par défaut (pas de paramètres) ou utiliser sort -t','
me donne ceci:
100,00869184
1234,31
200,04071
6492,8361
Et le tri en nombre sort -n
me donne ceci:
1234,31
200,04071
6492,8361
100,00869184
Comment puis-je utiliser le tri pour obtenir le résultat souhaité?
Modifié pour ajouter: il s'agit d'une opération ponctuelle pour créer une liste triée d'environ 7 millions de lignes, donc des solutions de contournement ou d'autres méthodes peu orthodoxes sont parfaitement acceptables.
-t
option comme ayant un espace entre le-t
et le caractèreRéponses:
C'est certainement une sale solution de contournement, mais j'ai trouvé un moyen de le faire grâce au conseil de @ slhck sur les paramètres régionaux. Si une meilleure réponse arrive qui serait plus utile aux autres, je l'accepterai certainement car cela ne fonctionne pratiquement que pour mon problème spécifique.
J'ai défini les paramètres régionaux sur espagnol (bolivien) pour que les virgules soient traitées comme des décimales, puis le tri numérique standard a fait l'affaire.
la source
GNU
sort
fait cela par défaut:Version:
Il y a cependant une mise en garde: si votre tri ne fonctionne pas comme prévu, votre
locale
paramètre est probablement différent deC
. Pourquoi est-ce?locale
définit le tri et l'interprétation des lettres, des chiffres, des caractères décimaux, etc.Pour vérifier cela, entrez simplement
locale
dans un terminal. Est-ceLC_NUMERIC
prêten_US.UTF-8
, peut-être? Cela expliquerait le mauvais ordre de tri. Réglez-le surC
:Ensuite, essayez à
sort
nouveau votre commande. Si vous souhaitez définir votre globalelocale
àC
, faire avec:la source
locale
problème. Mais qu'en est-ilsort --version
pour vous, en fait?--
les commandes n'ont pas fonctionné pour moi dans le passé non plus. J'ai vérifié la page de manuel et aucune version n'est indiquée explicitement, mais elle répertorie "HP-UX 11i version 2: août 2003" si cela vous aide. Mon LC_NUMERIC est réglé sur "C".,
comme séparateur décimal. Je n'ai cependant jamais utilisé HP-UX.Essayez d'ajouter l'
-g
option qui est supposée effectuer un tri numérique.Essayer:
la source
-n
tri numérique n'est-il pas ? -g me donne une option illégale.-g
est l'general-numeric-sort
option et devrait être disponible dans toute version récente desort
. @dpatcheryRemplacez le délimètre:
- devrait vous aider.
la source