containers

Trier un fichier avec la commande sort

Utiliser sort pour trier les colonnes d'un fichier

linux sort, sort linux, commande sort linux, commande linux sort, linux commande sort, sort commande linux, sort sous linux, exemple sort linux, bash sort, sort bash, sort colonne, cat sort, commande sort bash, trier linux, linux trier

Date de publication : 2009-05-13 10:18:22

Sous linux la commande sort permet de trier un fichier texte.

Après une courte présentation des options couramment utilisées avec sort, je vous donnerai quelques exemples afin de vous expliquer comment utiliser sort dans les grandes lignes.

Options principales de la commande sort

- k permet de spécifier les colonnes de tri (la numérotation commence à 1).
- t permet de spécifier le séparateur des champs (utile avec les fichiers csv ou le fichier /etc/passwd)
Pour les exemples suivants voici le format et les données du fichier texte que j'utilise :


pcr 01 3
pcr 10 3
pcr 04 5
pcr 03 6
alex 03 6
zorro 01 20
zorro 5 4

Tri sur toute une ligne

Par défaut la commande sort tri sur toutes les valeurs de la ligne :


pcr@home:~$ cat sort.txt | sort
alex 03 6
pcr 01 3
pcr 03 6
pcr 04 5
pcr 10 3
zorro 01 20
zorro 5 4

Tri en spécifiant la colonne de tri

L'option -k permet de spécifier les colonnes de tri, dans cette exemple je vais utiliser la seconde colonne pour trier le fichier texte :


pcr@home:~$ cat sort.txt | sort -k2n,2n
pcr 01 3
zorro 01 20
alex 03 6
pcr 03 6
pcr 04 5
zorro 5 4
pcr 10 3

J'utilise 2n,2n pour indiquer à la commande sort de commencer le tri sur la deuxième colonne et de l'arrêter à la deuxième colonne, le n indique à sort de traiter cette colonne en tant que champ numérique.

Tri en ordre inverse

Pour faire un tri en sens inverse il faut utiliser l'option de tri r (pour reverse), voici ce que donne un tri inverse sur la colonne 2 :


pcr@home:~$ cat sort.txt | sort -k2nr,2nr
pcr 10 3
zorro 5 4
pcr 04 5
alex 03 6
pcr 03 6
pcr 01 3
zorro 01 20

Tri sur plusieurs champs

Avec sort il est possible de faire un tri multiple en combinant les options, dans l'exemple suivant le tri est effectué sur la colonne 2 puis la colonne 1 en sens inverse :


pcr@home:~$ cat sort.txt | sort -k2n,2n -k1r,1r
zorro 01 20
pcr 01 3
alex 01 9
pcr 03 6
alex 03 6
pcr 04 5
zorro 5 4
pcr 10 3

Changement du séparateur de colonne

Pour utiliser sort sur des fichiers, csv ou le fichier passwd il est nécessaire de changer le séparateur des colonnes.

Le fichier suivant est un extrait mélangé de mon fichier passwd que je vais utiliser dans les prochains exemples :


daemon:x:1:1:daemon:/usr/sbin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
pcr:x:1000:1000:Patrick Poulain,,,:/home/pcr:/bin/bash
mail:x:8:8:mail:/var/mail:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
root:x:0:0:root:/root:/bin/bash

Tentative de tri sur la troisième colonne sans modification du séparateur :


pcr@home:~$ cat sort.txt | sort -k3n,3n
bin:x:2:2:bin:/bin:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
pcr:x:1000:1000:Patrick Poulain,,,:/home/pcr:/bin/bash
root:x:0:0:root:/root:/bin/bash
sys:x:3:3:sys:/dev:/bin/sh

Le résultat n'est pas du tout ce à quoi on peut s'attendre. La commande sort n'a pas réussi à trouver la troisième colonne donc il a trié sur la ligne complète.

Maintenant je vais modifier le séparateur de colonne pour que sort face son travail correctement :


pcr@home:~$ cat sort.txt | sort -t: -k3n,3n
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
pcr:x:1000:1000:Patrick Poulain,,,:/home/pcr:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

Et voilà c'est fini, vous pouvez maintenant faire vos propres tris de fichier texte. pour un savoir plus :


pcr@home:~$ man sort

Image : Storm Crypt

 
 

b1n@sp1n