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.
Table des matières
- 1 Comment utiliser la commande sort sur Linux
- 2 La commande sort Linux : utilisations et exemples
- 2.1 Comment trier une liste d’un fichier
- 2.2 Comment rediriger la sortie de la commande sort
- 2.3 Comment utiliser la commande sort avec de multiples commandes
- 2.4 Trier dans l’ordre inverse
- 2.5 Trier les données avec des majuscules et minuscules
- 2.6 Comment vérifier si un fichier est déjà trié
- 2.7 Supprimer des colonnes en doubles avec sort
- 2.8 Trier par champs ou colonnes
- 2.9 Utiliser la commande sort avec la commande join
- 2.10 Comparer les fichiers en utilisant la commande sort
- 2.11 Trier plusieurs fichiers à l’aide de la sortie de find
- 3 Liens
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 :
OPTIONS | DESCRIPTION |
-b, –ignore-leading-blanks | Ignorer les blancs en en-tête |
-d, –dictionary-order | Ne prend en compte que les blancs et les caractères alphanumériques |
-f, –ignore-case | Ignorer la case (Majuscule/minuscule) |
-g, –general-numeric-sort | Comparer selon la valeur numérique |
-i, –ignore-nonprinting | Ne considère que les caractères imprimables |
-M, –month-sort | Comparaison de mois < `JAN‘ < … < `DEC‘. |
-h, –human-numeric-sort | Compare les nombres lisibles par l’homme (e.g., “2K“, “1G“). |
-n, –numeric-sort | Comparer selon la valeur numérique de la chaîne |
-R, –random-sort | Trier par hachage aléatoire de clés |
–random-source=FILE | Récupérer des octets aléatoires à partir de FILE. |
-r, –reverse | Inverse le résultat des comparaisons |
–sort=WORD | Sort according to WORD: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V. |
-V, –version-sort | Tri naturel des numéros (de version) dans le texte |
OPTIONS | DESCRIPTION |
–batch-size=NMERGE | Fusionner 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=PROG | Compresser les temporaires avec PROG ; décompressez-les avec PROG -d |
–debug | Annotez la partie de la ligne utilisée pour trier et avertissez de l’utilisation douteuse de stderr |
–files0-from=F | Lire 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, –merge | Fusionner 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, –stable | Stabilisez le tri en désactivant la comparaison de dernier recours |
-t, –field-separator=SEP | Utilisez 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=N | Définissez le nombre de tris exécutés simultanément sur N |
-u, –unique | Avec -c, vérifiez l’ordre strict ; sans -c, n’affiche que le premier d’une exécution égale |
-z, –zero-terminated | Terminez les lignes avec 0 octet, pas de saut de ligne |
–help | Afficher l’aide de la commande |
–version | Affiche la version de la commande |
SIZE peut être suivi des suffixes multiplicatifs suivants :
% | 1% de mémoire |
b | 1 |
K | 1024 (default) |
…et ainsi de suite pour M, G, T, P, E, Z, Y.
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 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
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
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é.
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
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.
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
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
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.
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=-
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
Liens
- 12 exemples pour utiliser la commande cat sur Linux
- 6 exemples pour utiliser la commande tail sur Linux
- Comment utiliser la commande less sur Linux avec des exemples
- Utiliser la commande more sur Linux avec des exemples
- La commande cut de Linux : utilisation et exemples
- Comment utiliser la commande AWK avec des exemples
- Commande sed : utilisation et exemples
- 12 exemples de commandes grep sur Linux
- La commande TR : utilisations et exemples
- La commande echo : utilisations et exemples
- La commande sort Linux : utilisations et exemples
- La commande join Linux : utilisations et exemples