Sort
| 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.