CodeGym /Cours /Docker SELF /Tri et filtrage des fichiers : commandes `sort`, `uniq`, ...

Tri et filtrage des fichiers : commandes `sort`, `uniq`, `cut`

Docker SELF
Niveau 8 , Leçon 3
Disponible

1. Commande sort

La commande sort est conçue pour trier les lignes dans un fichier texte. Elle fonctionne avec n'importe quel format de texte : de simple texte brut à CSV. Par défaut, elle trie les lignes par ordre alphabétique. Cependant, il y a plein d'options qui vous permettront de faire des trucs de ouf.

Syntaxe de base

sort [options] fichier

Exemple simple

Supposons que nous ayons un fichier names.txt avec le contenu suivant :

Charlie
Alice
Bob
David

On peut le trier par ordre alphabétique comme suit :

sort names.txt

Résultat :

Alice
Bob
Charlie
David

Options clés de sort

Tri en ordre inverse

Si vous voulez trier les lignes en ordre décroissant, utilisez l'option -r :

sort -r names.txt

Résultat :

David
Charlie
Bob
Alice

Tri numérique

Pour les nombres, le tri alphabétique peut ne pas fonctionner correctement. Par exemple, voici le contenu du fichier numbers.txt :

10
2
5
1

Le tri alphabétique donnera :

1
10
2
5

Mais avec l'option -n (tri numérique) :

sort -n numbers.txt

Le résultat sera correct :

1
2
5
10

Sensibilité aux espaces

Parfois, les lignes contiennent des espaces au début ou à la fin. Pour que sort ne se mélange pas les pinceaux, utilisez l'option -b :

sort -b fichier_saleté.txt

Exemple

Supposons que nous ayons un journal de visites de site web visits.log :

user2 15
user1 5
user3 30
user4 20

On veut trier les utilisateurs par nombre de visites (deuxième colonne). Cela se fait ainsi :

sort -k2 -n visits.log

-k2 signifie "utiliser la deuxième colonne pour le tri". Résultat :

user1 5
user2 15
user4 20
user3 30

2. Commande uniq

La commande uniq supprime les lignes dupliquées dans un fichier. Mais attention : elle ne fonctionne qu'avec des doublons consécutifs. Donc, si des lignes identiques se trouvent à différentes parties du fichier, il faut d'abord les trier.

Syntaxe principale

uniq [options] fichier

Exemple simple

Supposons que nous avons un fichier colors.txt :

rouge
vert
vert
bleu
bleu
bleu
rouge

Si on utilise simplement uniq :

uniq colors.txt

Le résultat sera :

rouge
vert
bleu
rouge

Suppression des doublons inévitables

Tout d'abord, on trie le fichier :

sort colors.txt | uniq

Résultat :

bleu
vert
rouge

Options clés de uniq

Comptage des répétitions

Si tu veux savoir combien de fois chaque ligne apparaît, utilise l'option -c :

sort colors.txt | uniq -c

Résultat :

   3 bleu
   2 vert
   2 rouge

Exemple

Dans le fichier access.log, nous avons une liste d'adresses IP :

192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1

Nous voulons savoir quelle IP est apparue le plus souvent :

sort access.log | uniq -c | sort -rn

Résultat :

   3 192.168.0.1
   1 192.168.0.2
   1 192.168.0.3

3. Commande cut

La commande cut permet d'extraire certaines parties des lignes, comme des colonnes spécifiques dans un fichier CSV ou des plages de caractères.

Synthèse de base

cut [options] fichier

Un exemple simple

Fichier data.csv :

Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager

On va extraire uniquement les prénoms (première colonne) :

cut -d',' -f1 data.csv

Résultat :

Alice
Bob
Charlie

Où :

  • -d',' — séparateur (virgule).
  • -f1 — champ (colonne) à extraire.

Options principales de cut

Sélection d'une plage de caractères

Si notre fichier data.csv contient des colonnes de largeur fixe :

Alice      25 Developer
Bob        30 Designer
Charlie    22 Manager

On peut extraire uniquement l'âge (caractères de la position 12 à 14) :

cut -c12-14 data.csv

Résultat :

25
30
22

Sélection de plusieurs champs

Si nous avons un fichier log.csv :

2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped

Sélectionnons uniquement la date et le niveau des logs (champs 1 et 2) :

cut -d',' -f1,2 log.csv

Résultat :

2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO

4. Exemple pratique : Combinaison de sort, uniq et cut

On prend un fichier log avec des données comme ceci :

user1,192.168.0.1
user2,192.168.0.2
user1,192.168.0.1
user3,192.168.0.3
user2,192.168.0.2
  1. Extrayons les adresses IP :
cut -d',' -f2 log.txt
  1. Supprimons les doublons et comptons-les :
cut -d',' -f2 log.txt | sort | uniq -c
  1. Trier par nombre d'occurrences :
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn

Résultat :

2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION