Sort

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Tri de texte
Commande sort
Options clés -n -r -k -t -u
Voir aussi Awk, Grep

sort trie les lignes d'une entrée (fichier ou flux) par ordre alphabétique par défaut, avec des options pour trier numériquement, inverser l'ordre, choisir une colonne précise ou dédupliquer les lignes identiques.

Tri de base

sort fichier                # tri alphabétique (ordre du locale courant)
sort fichier | uniq -c      # tri puis comptage des doublons
sort -r fichier              # ordre inverse (décroissant)
sort -n fichier              # tri numérique (les chaînes sont comparées comme des nombres)
sort -n -r fichier            # numérique + décroissant

Sans -n, un tri alphabétique classe "10" avant "2" (comparaison caractère par caractère) : toujours ajouter -n pour trier des colonnes numériques.

Trier sur une colonne précise (-k)

Par défaut, sort découpe les lignes en champs séparés par des espaces/tabulations (numérotés à partir de 1). -k permet de choisir un champ précis, éventuellement en combinant plusieurs clés de tri :

sort -k2 fichier              # tri à partir du champ 2 jusqu'à la fin de ligne
sort -k2,2 fichier             # tri sur le champ 2 uniquement
sort -k2,2n fichier            # idem, en numérique
sort -k2,2n -k1,1r fichier      # tri numérique sur le champ 2, puis alphabétique inverse sur le champ 1 en cas d'égalité

Délimiteur personnalisé (-t)

-t change le séparateur de champs par défaut (utile pour /etc/passwd, des IP, des versions, etc.) :

sort -t: -k3 fichier            # trie /etc/passwd par UID (champ 3, séparateur ":")
sort -t: -n -k3 fichier          # idem, en numérique (sinon "10" passe avant "2")
sort -t. -k2 fichier             # trie sur le 2e segment d'une adresse IP ou d'une version (séparateur ".")
sort -t. -n -k2 fichier           # idem, en numérique

Dédupliquer (-u)

-u ne garde qu'une occurrence par valeur de clé (équivalent à un sort | uniq, mais en une seule commande) :

sort -u fichier                 # supprime les lignes strictement identiques
sort -t: -u -k1,1 /etc/passwd     # une seule ligne par nom d'utilisateur (champ 1)

Tri sur des sous-champs (positions caractère)

-k accepte aussi des positions champ.caractère, pratique pour trier sur une sous-partie d'un champ composite (identifiants, timestamps concaténés, etc.) :

commande | sort -k2.7,2.10n -k2.1,2.5n -k2.4,2.5n

Ici, le tri porte sur trois plages de caractères à l'intérieur du 2e champ (par exemple une date encodée sous la forme AAAAMMJJHHMM) : d'abord les caractères 7 à 10, puis 1 à 5, puis 4 à 5, chaque plage étant comparée numériquement.

Voir aussi

  • Awk — traitement de champs, souvent utilisé avant ou après sort
  • Grep — filtrage de lignes, à combiner avec sort dans un pipe