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
Où -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
- Extrayons les adresses IP :
cut -d',' -f2 log.txt
- Supprimons les doublons et comptons-les :
cut -d',' -f2 log.txt | sort | uniq -c
- 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
GO TO FULL VERSION