Quelle est la différence entre les options –general-numeric-sort et –numeric-sort dans gnu

sort fournit deux types de sorting numérique. Ceci est de la page de manuel:

  -g, --general-numeric-sort compare according to general numerical value -n, --numeric-sort compare according to ssortingng numerical value 

Quelle est la différence?

Le sorting numérique général compare les nombres à des flottants, cela permet une notation scientifique, par exemple 1.234E10, mais il est plus lent et soumis à une erreur d’arrondi (1.2345678 après 1.2345679).

Voir http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

‘-g’ ‘–general-numeric-sort’ ‘–sort = general-numeric’ Trier numériquement en utilisant la fonction standard strtod pour convertir un préfixe de chaque ligne en un nombre à virgule flottante double précision. Cela permet de spécifier des nombres à virgule flottante en notation scientifique, comme 1.0e-34 et 10e100. La locale LC_NUMERIC détermine le caractère décimal. Ne pas signaler les erreurs de débordement, de sous-dépassement ou de conversion. Utilisez la séquence de classement suivante: Lignes qui ne commencent pas par des nombres (tous considérés égaux). NaN (valeurs “Pas un nombre”, dans l’arithmétique à virgule flottante IEEE) dans un ordre cohérent mais dépendant de la machine. Moins l’infini. Nombre fini dans l’ordre numérique croissant (avec -0 et +0 égaux). Plus l’infini.

Utilisez cette option uniquement s’il n’y a pas d’alternative. il est beaucoup plus lent que –numeric-sort (-n) et peut perdre des informations lors de la conversion en virgule flottante.

‘-n’ ‘–numeric-sort’ ‘–sort = numeric’ Tri numériquement. Le nombre commence par chaque ligne et comprend des espaces facultatifs, un signe ‘-‘ facultatif et zéro ou plusieurs chiffres éventuellement séparés par des séparateurs de milliers, éventuellement suivis d’un caractère décimal et de zéro ou plusieurs chiffres. Un nombre vide est traité comme “0”. Les parameters régionaux LC_NUMERIC spécifient le caractère décimal et le séparateur de milliers. Par défaut, un espace est un espace ou un onglet, mais les parameters régionaux LC_CTYPE peuvent le modifier.

La comparaison est exacte il n’y a pas d’erreur d’arrondi.

Ni une notation «+» ni une notation exponentielle ne sont reconnues. Pour comparer numériquement ces chaînes, utilisez l’option –general-numeric-sort (-g).

Vous devriez faire attention à vos parameters régionaux. Par exemple, vous pourriez avoir l’intention de sortinger un nombre flottant (comme 2.2) alors que vos parameters régionaux pourraient utiliser une virgule (comme 2,2).

Comme indiqué dans ce forum , vous pouvez avoir des résultats erronés en utilisant les indicateurs -n ou -g.

Dans mon cas, j’utilise:

 LC_ALL=C sort -k 6,6n file 

afin de sortinger la 6ème colonne qui contient:

 2.5 3.7 1.4 

afin d’obtenir

 1.4 2.5 3.7