Apprenez en lisant dans l'ordre

Outils de mise en forme — sort / uniq / cut / wc / tr / tee

Pratique le tri avec sort -n, le comptage de doublons avec sort | uniq -c, l'extraction de colonnes avec cut -d',' -f1, le comptage de lignes avec wc -l, la traduction tr 'a-z' 'A-Z' et la sortie double de tee, une commande à la fois avec schémas et terminal.

Trier les lignes — sort

Dans cet article, tu vas pratiquer six commandes de mise en forme du texte, une à la fois : sort / uniq / cut / wc / tr / tee. On commence par sort. Elle réordonne les lignes de l'entrée en ordre lexicographique (caractère par caractère). Utilise sort -n pour trier les lignes comme des nombres, et sort -r pour l'ordre décroissant. En ordre lexicographique, 10 vient avant 2 (les premiers caractères 1 et 2 sont comparés) : trier des nombres demande donc -n.

FormeSignification
sortTrie les lignes en ordre lexicographique
sort -nTrie les lignes par valeur numérique
sort -rInverse l'ordre (décroissant)
sort : ordre lexicographique, sort -n : ordre numérique
comparé en textesort10 2 30nums.txt10 2 30comparé en nombressort -n2 10 30
L'ordre lexicographique compare les premiers caractères : 10 vient avant 2. Ajoute -n pour l'ordre numérique.
printf 'cherry\napple\nbanana\n' > words.txt   # crée un fichier de 3 lignes
sort words.txt                                   # apple banana cherry (ordre lexicographique)
sort -r words.txt                                # cherry banana apple (décroissant)
printf '100\n9\n25\n' > scores.txt              # crée un fichier numérique
sort scores.txt                                  # 100 25 9 (le 1 passe en premier)
sort -n scores.txt                               # 9 25 100 (ordre numérique)

① Crée un fichier de trois lignes numériques avec printf '10\n2\n30\n' > nums.txt.

② Trie-le avec sort nums.txt et vérifie qu'en ordre lexicographique 10 vient avant 2.

③ Ajoute à sort l'option d'ordre numérique et vérifie que l'ordre devient 2 → 10 → 30.

④ Ajoute ensuite l'option d'inversion et vérifie que les lignes sortent de la plus grande à la plus petite. (Si tu l'exécutes correctement, une explication s'affichera.)

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...

Regrouper les doublons — uniq

uniq fusionne en une seule les lignes identiques qui se trouvent côte à côte. Elle ne voit jamais les doublons éloignés : on lance donc normalement sort d'abord pour rapprocher les lignes égales, puis on lui passe le résultat par un pipe. Avec uniq -c, chaque ligne est préfixée par son nombre d'occurrences — un comptage par catégorie instantané.

FormeSignification
uniqFusionne les lignes identiques adjacentes
sort file.txt | uniqTrie d'abord pour fusionner aussi les doublons éloignés
uniq -cPréfixe chaque ligne par son nombre d'occurrences
Trier d'abord, puis regrouper avec uniq
b a asorta b b (adjacents)uniqabdoublons supprimés
uniq ne voit que les doublons adjacents : lance sort d'abord pour rapprocher les lignes égales.
printf 'banana\napple\nbanana\napple\n' > items.txt   # crée un fichier de 4 lignes
sort items.txt                                          # apple apple banana banana
sort items.txt | uniq                                   # apple banana (doublons supprimés)
sort items.txt | uniq -c                                # 2 apple / 2 banana (occurrences)

① Crée un fichier de cinq lignes avec doublons via printf 'pear\nfig\npear\nfig\nfig\n' > fruit.txt.

② Trie-le avec sort fruit.txt et vérifie que les lignes identiques se retrouvent côte à côte.

③ Passe la sortie de sort à uniq par un pipe et vérifie que les doublons fusionnent en un seul.

④ Dans le même pipe, ajoute à uniq l'option des occurrences et vérifie que chaque ligne est préfixée par son compte.

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...

Extraire des colonnes — cut

cut découpe chaque ligne selon un délimiteur et ne garde que les champs demandés. Le délimiteur se place après -d et le numéro de champ après -f : cut -d',' -f1 extrait donc la première colonne d'un CSV. Pour plusieurs champs, liste-les avec des virgules comme -f1,3. C'est l'outil pour récupérer juste les colonnes utiles d'un CSV ou d'un fichier de configuration séparé par des deux-points.

FormeSignification
cut -d',' -f1Extrait le champ 1 des lignes séparées par des virgules
cut -d':' -f1Extrait le champ 1 des lignes séparées par :
cut -d',' -f1,3Extrait les champs 1 et 3 ensemble
cut découpe sur un délimiteur et choisit les champs
cut -d',' -f1sato,30,tokyochamp 1satochamp 230champ 3tokyo-f1 : sato seuldécoupé en 3 (virgules)
La ligne est découpée selon le délimiteur -d, et seuls les champs numérotés par -f sont affichés.
printf 'root:x:0\nuser:x:1000\n' > passwd.txt   # crée un fichier séparé par des deux-points
cut -d':' -f1 passwd.txt                          # champ 1 seulement (les noms)
cut -d':' -f1,3 passwd.txt                        # champs 1 et 3

① Crée un fichier séparé par des virgules avec printf 'sato,30,tokyo\nito,25,osaka\n' > people.csv.

② Utilise cut avec la virgule comme délimiteur pour extraire seulement le champ 1 (les noms).

③ Extrais ensuite les champs 1 et 3 ensemble et vérifie comment on indique plusieurs champs.

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...

Compter lignes, mots et octets — wc

wc compte les lignes, les mots et les octets de son entrée. Sans option, elle affiche les trois nombres ; wc -l n'affiche que le nombre de lignes, wc -w que le nombre de mots et wc -c que le nombre d'octets. La plus utilisée est wc -l : alimentée par un pipe, comme dans ls | wc -l, elle répond à des questions comme « combien de fichiers ? » ou « combien de lignes correspondantes ? ».

FormeSignification
wcAffiche lignes, mots et octets ensemble
wc -lN'affiche que le nombre de lignes
wc -wN'affiche que le nombre de mots
wc -cN'affiche que le nombre d'octets
wc compte trois nombres
memo.txtgood morning / hellowc -lwc -wwc -c2 lignes3 mots19 octets
Même entrée — l'option décide de ce qui est compté.
printf 'one two three\nfour\n' > draft.txt   # crée un fichier de 2 lignes et 4 mots
wc draft.txt                                  # lignes, mots et octets ensemble
wc -l draft.txt                               # 2 (lignes seulement)
ls | wc -l                                    # depuis un pipe : compte les fichiers

① Crée un fichier de deux lignes avec printf 'good morning\nhello\n' > memo.txt.

② Lance wc memo.txt et vérifie que trois nombres s'affichent : lignes, mots et octets.

③ Ajoute l'option qui n'affiche que le nombre de lignes et vérifie qu'elle montre 2.

④ Ajoute ensuite l'option qui n'affiche que le nombre de mots et vérifie qu'elle montre 3.

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...

Traduire des caractères — tr

tr remplace les caractères de l'entrée standard caractère par caractère. tr 'a-z' 'A-Z' convertit les minuscules en majuscules. tr -s compresse les répétitions d'un même caractère en un seul (les espaces répétés, par exemple), et tr -d supprime les caractères indiqués. tr ne prend pas de nom de fichier en argument — elle lit depuis un pipe ou une redirection d'entrée.

FormeSignification
tr 'a-z' 'A-Z'Convertit les minuscules en majuscules
tr -s ' 'Compresse les caractères répétés en un seul
tr -d 'x'Supprime les caractères indiqués
tr traduit, compresse et supprime des caractères
hellotr 'a-z' 'A-Z'HELLOa b(3 espaces)tr -s ' 'a b(1 espace)a-b-ctr -d '-'abc
De haut en bas : traduction (minuscules → majuscules), compression des répétitions (-s) et suppression (-d).
echo 'hello linux' | tr 'a-z' 'A-Z'     # HELLO LINUX
echo 'a   b   c' | tr -s ' '            # compresse les espaces répétés -> a b c
echo 'a-b-c' | tr -d '-'                # supprime - -> abc

① Passe la sortie de echo 'desktech learn' à tr par un pipe et convertis les minuscules en majuscules.

② Passe ensuite la sortie de echo 'x y z' à tr et utilise l'option qui compresse les espaces répétés en un seul.

③ Passe la sortie de echo 'a-b-c' à tr et utilise l'option de suppression pour obtenir abc.

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...

Envoyer la sortie vers l'écran et un fichier — tee

tee prend ce qu'elle reçoit du pipe, l'affiche à l'écran et l'écrit en même temps dans un fichier. Utilise-la quand tu veux garder une trace des résultats intermédiaires tout en passant les données à la commande suivante. Enchaînée comme commande | tee out.txt | commande suivante, elle enregistre dans out.txt pendant que le pipeline continue. Pour ajouter à la fin d'un fichier existant au lieu de l'écraser, utilise tee -a.

FormeSignification
tee out.txtÉcrit à l'écran et dans le fichier (écrase)
tee -a out.txtAffiche à l'écran et ajoute à la fin du fichier
tee envoie la sortie à l'écran et dans le fichier
echo hi| tee out.txt| cmd suivantehi à l'écranhi aussidans out.txtpipeline continuecat out.txthi est toujours là
tee affiche ce qu'elle reçoit à l'écran, l'écrit dans le fichier, et tu peux vérifier plus tard avec cat.
ls | tee list.txt              # affiche la liste et l'enregistre dans list.txt
cat list.txt                   # le fichier l'a aussi
echo 'extra' | tee -a list.txt # -a ajoute au lieu d'écraser

① Passe la sortie de echo 'one two' à tee par un pipe pour l'écrire dans note.txt, et vérifie que le même contenu s'affiche aussi à l'écran.

② Lance cat note.txt pour vérifier que le même contenu est aussi dans le fichier.

③ Ajoute ensuite la sortie de echo 'three' à la fin de note.txt avec l'option d'ajout de tee.

④ Relance cat note.txt et vérifie que le fichier est passé à deux lignes.

Linux console
0 / 3 exécutée(s)
Loading Linux Terminal...
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Quelles lignes uniq traite-t-elle comme des doublons ?

Question 2Qu'affiche cut -d',' -f1 users.csv ?

Question 3Que se passe-t-il quand tu lances echo hi | tee out.txt ?