Menu Fermer

La commande sort Linux : utilisations et exemples

Sur Linux, la commande sort trie le contenu d’un fichier texte, ligne par ligne.
C’est une commande très utile qui réorganise les lignes d’un fichier texte afin qu’elles soient triées, numériquement et alphabétiquement.

Dans ce tutoriel, je vous montre comment utiliser la commande sort avec de nombreux exemples.

La commande sort Linux : utilisations et exemples

Comment utiliser la commande sort sur Linux

La syntaxe de la commande sort est la suivante :

sort [OPTION] [FICHIER]

Par défaut, les règles de tri sont :

  • Les lignes commençant par un chiffre apparaîtront avant les lignes commençant par une lettre
  • Les lignes commençant par une lettre qui apparaît plus tôt dans l’alphabet apparaîtront avant les lignes commençant par une lettre qui apparaît plus tard dans l’alphabet
  • Les lignes commençant par une lettre minuscule apparaîtront avant les lignes commençant par la même lettre en majuscule

Les règles de tri peuvent être modifiées en fonction des options que vous fournissez à la commande sort ; ceux-ci sont énumérés ci-dessous.

Les options de la commande :

OPTIONSDESCRIPTION
-b,
–ignore-leading-blanks
Ignorer les blancs en en-tête
-d–dictionary-orderNe prend en compte que les blancs et les caractères alphanumériques
-f–ignore-caseIgnorer la case (Majuscule/minuscule)
-g,
–general-numeric-sort
Comparer selon la valeur numérique
-i–ignore-nonprintingNe considère que les caractères imprimables
-M–month-sortComparaison de mois < `JAN‘ < … < `DEC‘.
-h,
–human-numeric-sort
Compare les nombres lisibles par l’homme (e.g., “2K“, “1G“).
-n–numeric-sortComparer selon la valeur numérique de la chaîne
-R–random-sortTrier par hachage aléatoire de clés
–random-source=FILERécupérer des octets aléatoires à partir de FILE.
-r–reverseInverse le résultat des comparaisons
–sort=WORDSort according to WORD: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V.
-V–version-sortTri naturel des numéros (de version) dans le texte
Les options de tri de la commande sort
OPTIONSDESCRIPTION
–batch-size=NMERGEFusionner au maximum les entrées NMERGE à la fois ; pour plus d’utilisation des fichiers temporaires
-c–check,
–check=diagnose-first
Vérifiez les entrées triées ; ne triez pas
-C–check=quiet,
–check=silent
Comme -c, mais ne signale pas la première mauvaise ligne.
–compress-program=PROGCompresser les temporaires avec PROG ; décompressez-les avec PROG -d
–debugAnnotez la partie de la ligne utilisée pour trier et avertissez de l’utilisation douteuse de stderr
–files0-from=FLire l’entrée des fichiers spécifiés par les noms terminés par NUL dans le fichier F ; Si F est ‘-‘, lisez les noms à partir de l’entrée standard
-k–key=POS1[,POS2]Commencez une clé à POS1 (origine 1), terminez-la à POS2 (fin de ligne par défaut). Voir la syntaxe POS ci-dessous
-m–mergeFusionner les fichiers déjà triés ; ne triez pas
-o–output=FILEÉcrire le résultat dans FILE au lieu de la sortie standard
-s–stableStabilisez le tri en désactivant la comparaison de dernier recours
-t–field-separator=SEPUtilisez SEP au lieu de la transition non vide à vide
-T,
–temporary-directory=DIR
Utilisez DIR pour les temporaires, et non $TMPDIR ou /tmp ; plusieurs options spécifient plusieurs répertoires
–parallel=NDéfinissez le nombre de tris exécutés simultanément sur N
-u–uniqueAvec -c, vérifiez l’ordre strict ; sans -c, n’affiche que le premier d’une exécution égale
-z–zero-terminatedTerminez les lignes avec 0 octet, pas de saut de ligne
–helpAfficher l’aide de la commande
–versionAffiche la version de la commande
Les options de la commande sort

SIZE peut être suivi des suffixes multiplicatifs suivants :

%1% de mémoire
b1
K1024 (default)
Utilisation de SIZE avec la commande sort

…et ainsi de suite pour MGTPEZY.

La commande sort Linux : utilisations et exemples

Dans ces exemples, j’utilise le fichier fruits.txt qui contient :

apples
oranges
pears
kiwis
bananas

Comment trier une liste d’un fichier

Pour trier le contenu du fichier fruits.txt, utilisez la commande de cette manière :

sort fruits.txt

Dans notre exemple, cela trie la liste par ordre alphabétique et la sortie est :

bananes
des oranges
des poires
Kiwis
pommes

Le fichier fruits.txt n’est pas modifiée, simplement la commande sort affiche le tri en sortie du terminal.

Comment trier une liste d'un fichier avec la commande sort

Comment rediriger la sortie de la commande sort

Vous pouvez rediriger la sortie de la commande sort grâce au caractère >.
Par exemple pour rediriger vers fruits-tries.txt :

sort fruits.txt > fruits-tries.txt

Mais on peut aussi utiliser l’option -o pour rediriger le tri vers un autre fichier.
Ainsi, avec le même exemple et pour un résultat identique :

sort -o fruits.txt fruits-tries.txt

Comment utiliser la commande sort avec de multiples commandes

Sort peut trier la sortie d’une autre commande que l’on transmet avec le pipe.
Ainsi vous pouvez trier le résultat de plusieurs commandes en cascades.

Trier dans l’ordre inverse

Pour trier une liste dans l’ordre inverse, utilisez l’option -r.
Par exemple pour trier le fichier fruits.txt dans l’ordre alphabétique inverse :

sort -r fruits.txt

On obtient alors en sortie :

pommes
Kiwis
des poires
des oranges
bananes
Utiliser la commande sort pour faire un tri inverse

Trier les données avec des majuscules et minuscules

Dans la majorité des cas, les lignes des fichiers mélangent des majuscules et minuscules.
Voici le comportement de la commande sort lorsque vous avez un mélange de lettres majuscules et minuscules au début de vos lignes.

Imaginons le contenu suivant dans melange-minuscules-majuscules.txt :

a
b
A
c
B
C
D
d

On utilise la commande sort pour trier les données :

sort melange-minuscules-majuscules.txt

La sortie est la suivante :

a
A
b
B
c
C
d
D

Comme vous pouvez le voir, il est trié par ordre alphabétique, les lettres minuscules apparaissant toujours avant les lettres majuscules. Ce tri est “insensible à la casse”, et c’est la valeur par défaut pour le tri GNU, qui est la version du tri utilisée dans GNU/Linux.

Vous pouvez changer le comportement de sort en jouant sur les locales.

En bref, la “localisation” fait référence à la langue utilisée par le système d’exploitation, qui, au niveau le plus élémentaire, définit les caractères qu’il utilise. Chaque lettre du système est représentée dans un certain ordre. La modification des paramètres régionaux affectera les caractères utilisés par le système d’exploitation et, ce qui est le plus pertinent pour le tri, l’ordre dans lequel ils sont encodés.

Vous pouvez modifier la localisation en modifiant la variable d’environnement LC_ALL afin d’activer le tri par octet :

export LC_ALL=C

Ce qui dans notre exemple, nous donne :

export LC_ALL=C
sort melange-minuscules-majuscules.txt
A
B
C
D
a
b
c
d
Trier les données avec des majuscules et minuscules avec la commande sort

De ce fait, on peut utiliser l’option -f/–ignore-case pour obtenir le tri suivant :

sort -f melange-minuscules-majuscules.txt
A
a
B
b
C
c
D
d

Comment vérifier si un fichier est déjà trié

Parfois, on peut avoir besoin de vérifier si un fichier est déjà trié.
Pour cela, on utilise l’option -c (check) :

sort -c data.txt

Lorsque le fichier n’est pas trié, l’option retourne disorder avec la ligne et le contenu qui n’est pas trié.

Comment vérifier si un fichier est déjà trié avec la commande sort

Supprimer des colonnes en doubles avec sort

Voici l’option la plus utile de la commande sort.
Cela aide à éliminer les mots répétés dans un fichier et à rendre également organisé l’élément de fichier. Il maintient également la cohérence des données dans le fichier.

Par exemple dans ce fichier, nous avons une liste avec des contenus identiques.
Utilisez l’option -u pour trier la liste et supprimer les doublons.

sort –u fichier.txt
Supprimer des colonnes en doubles avec sort

Trier par champs ou colonnes

Normalement, la commande sort trie les lignes entière d’un fichier : elle compare tous les caractères du premier caractère d’une ligne, au dernier.

Si, d’autre part, vous souhaitez trier pour comparer un sous-ensemble limité de vos données, vous pouvez spécifier les champs à comparer à l’aide de l’option -k.
“-k” signifie “clé” – nous définissons la “clé de tri” utilisée dans la comparaison.
Cela permet de trier un fichier par une numéro de champs ou colonnes.

Prenons le cas du fichier liste.txt suivant :

01 Vincent Jr.Developpeur
02 Pierre Sr.Developpeur
03 Albert Sr.Developpeur
04 Kevin Jr.Designer
05 Louis Sr.Designer

Si on demande à trier le fichier avec la commande suivante :

sort liste.txt

Rien ne change car la liste est déjà trié avec le bon ordre de numéro.

Maintenant, utilisons la commande sort avec l’option -k pour demander à ignorer le premier champs et à trier avec le second champs.

Trier par champs ou colonnes avec la commande sort

Vous pouvez également spécifier une option plus complexe. L’argument complet de positionnement ressemble à ceci :

-k POS1, POS2

où POS1 est la position du champ de départ et POS2 est la position de fin du champ. Chaque position de champ, à son tour, est définie comme suit :

F.C

où F est le numéro de champ et c est le caractère dans ce champ pour commencer la comparaison de tri.

sort -k 3 /tmp/liste.txt

On obtient alors ceci triés par Jr. et Sr. de la 3e colonnes.

04 Kevin Jr.Designer
01 Vincent Jr.Developpeur
05 Louis Sr.Designer
02 Pierre Sr.Developpeur
03 Albert Sr.Developpeur

Nous pouvons ignorer les trois premiers caractères du troisième champ et trier uniquement sur la base du titre, en ignorant l’ancienneté :

sort -k 3.3 /tmp/liste.txt
04 Kevin Jr.Designer
05 Louis Sr.Designer
01 Vincent Jr.Developpeur
02 Pierre Sr.Developpeur
03 Albert Sr.Developpeur
Trier par champs ou colonnes avec la commande sort

Nous pouvons également spécifier où cesser de comparer la comparaison.
Si nous trions uniquement sur les caractères troisième cinquième du troisième champ de chaque ligne, comme celui-ci :

sort -k 3.3,3.5 /tmp/liste.txt

La commande sort ne verra que la même chose sur chaque ligne: “.de” … et rien d’autre.
En conséquence, sort ne verra aucune différence dans les lignes et la sortie triée sera la même que celle du fichier d’origine:

01 Vincent Jr.Developpeur
02 Pierre Sr.Developpeur
03 Albert Sr.Developpeur
04 Kevin Jr.Designer
05 Louis Sr.Designer
Trier par champs ou colonnes avec la commande sort

Utiliser la commande sort avec la commande join

La commande sort peut être particulièrement utile lorsqu’elle est utilisée conjointement avec la commande join.
Normalement join permet de rejoindre les lignes de deux fichiers dont le premier champs correspondent.

Disons que vous avez deux fichiers, fichier1.txt et fichier2.txt.

fichier1.txt contient le texte suivant :

3 tomate
1 oignon
4 betteraves
2 poivre

fichier2.txt contient le texte suivant :

4 orange
3 pomme
1 mangue
2 pamplemousse

Si vous souhaitez trier ces deux fichiers et les rejoindre, vous pouvez tout faire en une seule commande si vous utilisez la coque de la commande Bash, comme ceci :

join <(sort fichier1.txt) <(sort fichier2.txt)

Ici, les commandes sort entre parenthèses sont toutes exécutées et leur sortie est redirigée vers la commande join, qui prend sa production comme entrée standard pour ses premier et second arguments; La commande join assemble le contenu trié des deux fichiers et donne des résultats similaires aux résultats ci-dessous.

join <(sort fichier1.txt) <(sort fichier2.txt)
1 oignon mangue
2 poivre pamplemousse
3 tomate pomme
4 betteraves orange

Comparer les fichiers en utilisant la commande sort

Nous pouvons également adopter le concept de comparer deux fichiers. La technique est la même que celle avec la commande join mais cette fois on utilise la commande comm.

Premièrement, deux fichiers sont triés, puis les données d’entre elles sont comparées.
Considérez les deux mêmes fichiers que discutés dans l’exemple précédent fichier1.txt and fichier2.txt :

comm <(sort fichier1.txt) <(sort fichier2.txt)

Ce qui donne le résultat suivant :

        1 mangue
1 oignon
        2 pamplemousse
2 poivre
        3 pomme
3 tomate
4 betteraves
        4 orange

Les données sont triées et disposées alternativement. La ligne initiale du fichier fichier1.txt est écrit à côté de la première ligne du fichier fichier2.txt.

Comparer les fichiers en utilisant la commande sort

Trier plusieurs fichiers à l’aide de la sortie de find

L’une des commandes les plus utiles du tri est de trier les données de différents fichiers à la fois. Cela peut être fait en utilisant la commande de recherche. La sortie de la commande de recherche agira comme une entrée pour la commande après la conduite de tri une commande de tri. Trouver le mot-clé est utilisé pour ne donner qu’un seul fichier sur chaque ligne ou dire qu’il utilise une pause après chaque mot.

Par exemple, envisageons trois fichiers nommés fichier1.txt, fichier2.txt et fichier3.txt. Ici le “?” représente n’importe quel nombre suivi du mot “échantillon”. La recherche va chercher tous les trois fichiers et leurs données seront triées à l’aide d’une commande de tri avec l’initiative de la pipe:

find -name "fichier?.txt" -print0 | sort -files0-from=-
Trier plusieurs fichiers à l'aide de la sortie de find

Voici un autre exemple pour trier les fichiers par ordre alphabétique comme le ferai la commande ls -ltr.

find . -printf "%T+ %p\n" | sort