web-dev-qa-db-fra.com

Tri des données en fonction de la deuxième colonne d'un fichier

J'ai un fichier de deux colonnes et n nombre de lignes.

la colonne 1 contient names et la colonne2 age.

Je souhaite trier le contenu de ce fichier par ordre croissant en fonction de la variable age (dans la deuxième colonne).

Le résultat devrait afficher la name de la plus jeune personne avec name, puis la deuxième personne la plus jeune, etc.

Toute suggestion pour un script à une ligne Shell ou bash.

176
Angelo

Vous pouvez utiliser la commande sort :

sort -k2 -n yourfile

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

Par exemple:

$ cat ages.txt 
Bob 12
Jane 48
Mark 3
Tashi 54

$ sort -k2 -n ages.txt 
Mark 3
Bob 12
Jane 48
Tashi 54
280
Matt Ryall

Solution:

sort -k 2 -n filename

plus verbalement écrit comme:

sort --key 2 --numeric-sort filename


Exemple:

$ cat filename
A 12
B 48
C 3

$ sort --key 2 --numeric-sort filename 
C 3
A 12
B 48

Explication:

  • - k # - cet argument spécifie la première colonne à utiliser pour le tri. (notez que la colonne est définie ici comme un champ délimité par des espaces; l'argument -k5 sera trié en commençant par le cinquième () de chaque ligne, pas le cinquième caractère de chaque ligne)

  • - n - cette option spécifie un "tri numérique", ce qui signifie que la colonne doit être interprétée comme une rangée de chiffres et non de texte.


Plus:

Les autres options courantes incluent:

  • - r - cette option inverse l'ordre de tri. Il peut aussi être écrit - reverse.
  • - i - Cette option ignore les caractères non imprimables. Il peut aussi être écrit - ignore-nonprinting.
  • - b - Cette option ignore les espaces vides de premier plan, ce qui est pratique car les espaces blancs sont utilisés pour déterminer le nombre de lignes. Il peut également être écrit - ignore-lead-blanks.
  • - f - Cette option ignore la casse des lettres. "A" == "a". Il peut aussi être écrit - ignore-case.
  • - t [nouveau séparateur] - Cette option permet au prétraitement d'utiliser un opérateur autre que l'espace. Il peut également être écrit sous la forme --field-separator.

Il existe d'autres options, mais ce sont les plus courantes et les plus utiles, que j'utilise souvent.

76
DCurro

Pour les valeurs séparées par des tabulations, le code ci-dessous peut être utilisé

sort -t$'\t' -k2 -n

-r peut être utilisé pour obtenir des données dans l'ordre décroissant.
- n pour le tri numérique
Par ordre décroissant, le code est le suivant

sort -t$'\t' -k2 -rn
6
Saurabh

Utilisez sort.

sort ... -k 2,2 ...
4