Aller au contenu
Administration Linux medium

cut : extraire des colonnes

30 min de lecture

Quand on doit extraire rapidement une colonne d'un fichier CSV, récupérer un champ d'un fichier de configuration ou isoler une partie d'une ligne de log, cut est l'outil idéal. Simple et rapide, cut permet d'extraire des portions de texte par position (caractères) ou par champs (délimiteur), directement en ligne de commande.

  • Extraire des colonnes par position avec -c (caractères)
  • Extraire des champs avec délimiteur avec -f et -d
  • Utiliser des plages (1-5, 3-, -10)
  • Combiner cut avec d'autres commandes (grep, sort, uniq)

cut fait partie des commandes de traitement de texte sous Linux. Chaque outil a sa spécialité :

CommandeSpécialitéQuand l'utiliser
cutExtraire des colonnes/champsFichiers délimités simples (CSV, TSV, passwd)
awkTraitement avancé de colonnesCalculs, conditions, formats complexes
sedÉditer du texte en fluxRemplacer, supprimer, insérer
grepFiltrer des lignesRechercher des patterns
trTranslitérer des caractèresRemplacer caractère par caractère
pasteFusionner des fichiersJoindre des colonnes côte à côte

Quand utiliser cut vs awk ?

Situationcutawk
Extraire une colonne simpleOui, cut -d',' -f2Oui, mais disproportionné
Délimiteur unique et fixeOui, cas idéalOui
Espaces multiples comme délimiteurNonOui, awk '{print $2}'
CSV avec guillemetsNonOui (ou csvtool)
Réordonner les colonnesNonOui, awk '{print $3,$1}'
Calculs sur les colonnesNonOui, awk '{sum+=$2}'

Combinaisons fréquentes :

Fenêtre de terminal
# grep + cut : filtrer puis extraire
grep 'admin' users.csv | cut -d',' -f2
# cut + sort + uniq : compter les valeurs d'une colonne
cut -d',' -f4 users.csv | sort | uniq -c
# cut + xargs : exécuter une commande sur chaque valeur
cut -d':' -f1 /etc/passwd | xargs -I{} id {}

🧠 Modèle mental — Comment fonctionne cut

cut = Choisir le mode → Spécifier quoi extraire → Obtenir le résultat

Modèle mental cut : Entrée (fichier/stdin) → Mode d'extraction (-c, -f, -b) → Sortie (colonnes extraites)

Points clés

  • cut extrait des parties de chaque ligne (colonnes, caractères ou champs)
  • -c pour les caractères (position), -f pour les champs (avec délimiteur)
  • Par défaut, le délimiteur est la tabulation (\t)
  • Utilise -d pour spécifier un autre délimiteur (virgule, deux-points...)
  • Les plages : 1-5 (de 1 à 5), 3- (à partir de 3), -10 (jusqu'à 10)
  • cut ne modifie pas le fichier, il affiche sur stdout

Règles d'or

1
Toujours spécifier -d si le délimiteur n'est pas une tabulation Par défaut cut utilise TAB. Pour CSV, utiliser -d','
2
Préférer awk pour les cas complexes cut est limité : un seul délimiteur, pas de regex, pas de calculs

Vocabulaire essentiel

-c1-10
Caractères 1 à 10
-f2
Champ numéro 2
-d','
Délimiteur virgule
-f1,3,5
Champs 1, 3 et 5
-f2-
Du champ 2 jusqu'à la fin
--complement
Inverse la sélection
📚 Pour aller plus loin — 6 options avancées
-b
Extraction par octets (utile pour UTF-8)
-s
N'affiche que les lignes avec délimiteur
--output-delimiter
Change le délimiteur en sortie
-f-3
Du début jusqu'au champ 3
-f1,3-5,7
Combinaison de champs et plages
-c1,5,10
Caractères spécifiques (non contigus)

cut lit le fichier ligne par ligne, découpe selon le mode choisi (caractères ou champs), puis affiche les portions sélectionnées sur stdout.

La signature est volontairement pauvre : aucune option n'a de valeur par défaut utile. Sans -f, -c ou -b, cut refuse de travailler et renvoie you must specify a list of bytes, characters, or fields. Si vous omettez le fichier, cut lit stdin, ce qui en fait un maillon naturel de pipeline.

Fenêtre de terminal
cut [OPTIONS] [FICHIER]

cut propose deux modes principaux, et le choix se fait sur une seule question : les colonnes sont-elles séparées par un caractère constant, ou alignées à une position constante ? Un CSV, un /etc/passwd ou un TSV relèvent du premier cas, une sortie tabulée à largeur fixe du second.

ModeOptionUsageExemple
Champs-fFichiers délimités (CSV, TSV)cut -d',' -f2 data.csv
Caractères-cPositions fixescut -c1-10 log.txt

C'est le mode le plus courant. On spécifie :

  • -d'X' : le délimiteur (caractère séparateur)
  • -f N : le(s) champ(s) à extraire
Fenêtre de terminal
# Fichier CSV (virgule)
cut -d',' -f2 users.csv
# Fichier passwd (deux-points)
cut -d':' -f1,7 /etc/passwd
# Fichier TSV (TAB par défaut)
cut -f2 data.tsv

Important : sans -d, cut utilise la tabulation comme délimiteur par défaut.

La même syntaxe de plage s'applique à -f (champs) et à -c (caractères) : ce qui change, c'est l'unité comptée, pas la grammaire. Retenez surtout les deux formes ouvertes, -f3- et -f-3 : ce sont elles qui évitent de connaître à l'avance le nombre de colonnes. Le tiret seul (-f-) est refusé, cut répond invalid range with no endpoint.

SyntaxeSignificationExemple
-f NChamp N seul-f2 → 2ème champ
-f N,M,PChamps N, M et P-f1,3,5 → champs 1, 3, 5
-f N-MDe N à M-f2-4 → champs 2, 3, 4
-f N-De N à la fin-f3- → du 3ème à la fin
-f -NDu début à N-f-3 → champs 1, 2, 3

Utile pour les fichiers à largeur fixe (logs, exports mainframe). Ce mode ignore complètement les délimiteurs : -d n'a aucun effet avec -c. Comptez les positions sur une ligne réelle, jamais sur l'en-tête, dont l'alignement diffère souvent des données.

Fenêtre de terminal
# Les 15 premiers caractères (adresse IP dans un log)
cut -c1-15 access.log
# Caractères 10 à 20
cut -c10-20 fichier.txt
# Caractères spécifiques (non contigus)
cut -c1,5,10 fichier.txt

Trois options font gagner du temps sans changer la logique d'extraction. --complement évite d'énumérer vingt colonnes pour en écarter une seule. -s protège les traitements automatisés : sans lui, une ligne de commentaire ou une ligne vide traverse cut intacte et pollue la sortie. --output-delimiter sépare le délimiteur d'entrée du délimiteur de sortie, utile pour convertir un CSV en TSV.

OptionEffetExemple
--complementInverse la sélection-f3 --complement (tout sauf champ 3)
-sIgnore les lignes sans délimiteur-d':' -f1 -s
--output-delimiterChange le délimiteur en sortie--output-delimiter=';'

Le point commun de ces quatre situations : cut ne signale rien. Il ne renvoie pas de code d'erreur quand le champ demandé n'existe pas, ni quand le délimiteur est absent de la ligne. C'est donc la sortie qu'il faut inspecter, jamais $?. Lisez la colonne « Cause » avant la colonne « Solution » : dans trois cas sur quatre, la réponse est de passer à awk, pas de bricoler les options de cut.

ErreurCauseSolution
Toute la ligne est affichéeMauvais délimiteur ou délimiteur absentVérifier avec cat -A, utiliser le bon -d
Résultat videChamp inexistant (numéro trop grand)Compter les colonnes avec head -1 | tr ',' '\n' | wc -l
Colonnes mal découpéesEspaces multiples ou guillemets CSVUtiliser awk à la place
L'ordre des colonnes n'est pas respectécut affiche dans l'ordre du fichierUtiliser awk '{print $3,$1}'

Maintenant que vous comprenez la logique de cut, voici douze modèles prêts à l'emploi. Chacun donne sa formule générale et un exemple concret.

Récupérer une seule colonne d'un fichier délimité.

Fenêtre de terminal
cut -d'DELIM' -f N <fichier> # formule
cut -d',' -f2 users.csv # exemple
  • DELIM : caractère séparateur (virgule, deux-points…)
  • N : numéro du champ à extraire (commence à 1)

Récupérer plusieurs colonnes précises.

Fenêtre de terminal
cut -d'DELIM' -f N,M,P <fichier> # formule
cut -d':' -f1,7 /etc/passwd # exemple
  • N,M,P : liste de champs séparés par des virgules

Récupérer une série de colonnes consécutives.

Fenêtre de terminal
cut -d'DELIM' -f N-M <fichier> # formule
cut -d',' -f2-4 data.csv # exemple
  • N-M : du champ N au champ M inclus

Extraire à partir d'un champ jusqu'au dernier.

Fenêtre de terminal
cut -d'DELIM' -f N- <fichier> # formule
cut -d':' -f3- /etc/passwd # exemple
  • N- : à partir du champ N jusqu'à la fin de la ligne

Extraire du premier champ jusqu'à N.

Fenêtre de terminal
cut -d'DELIM' -f -N <fichier> # formule
cut -d',' -f-3 data.csv # exemple
  • -N : du début jusqu'au champ N inclus

Extraire des caractères à des positions fixes.

Fenêtre de terminal
cut -c N-M <fichier> # formule
cut -c1-15 access.log # exemple
  • -c : mode caractères (position fixe)
  • N-M : positions des caractères

Extraire des colonnes d'un fichier séparé par des tabulations.

Fenêtre de terminal
cut -f N <fichier.tsv> # formule
cut -f2 data.tsv # exemple
  • -f sans -d : utilise la tabulation par défaut

Afficher tout sauf les champs spécifiés.

Fenêtre de terminal
cut -d'DELIM' -f N --complement <fichier> # formule
cut -d',' -f3 --complement users.csv # exemple
  • --complement : inverse la sélection

Utiliser un séparateur différent dans le résultat.

Fenêtre de terminal
cut -d'DELIM1' -f N,M --output-delimiter='DELIM2' <fichier> # formule
cut -d',' -f1,3 --output-delimiter=$'\t' data.csv # exemple
  • --output-delimiter : délimiteur appliqué à la sortie
  • cut n'interprète aucune séquence d'échappement : --output-delimiter='\t' écrit les deux caractères \ et t. Pour une vraie tabulation, passez par la syntaxe $'\t' du shell (bash, zsh)

Filtrer les lignes, puis extraire des colonnes.

Fenêtre de terminal
grep 'PATTERN' <fichier> | cut -d'DELIM' -f N # formule
grep ',admin,' users.csv | cut -d',' -f2 # exemple
  • grep filtre d'abord, cut extrait ensuite

Extraire une colonne et compter ses valeurs uniques.

Fenêtre de terminal
cut -d'DELIM' -f N <fichier> | sort | uniq -c # formule
cut -d',' -f4 users.csv | sort | uniq -c # exemple
  • sort | uniq -c : trie puis compte les occurrences

N'afficher que les lignes contenant effectivement le délimiteur.

Fenêtre de terminal
cut -d'DELIM' -f N -s <fichier> # formule
cut -d':' -f1 -s mixed.txt # exemple
  • -s : supprime de la sortie les lignes sans délimiteur

Six erreurs reviennent constamment avec cut. Pour chacune : la commande piégée, le symptôme, la cause et la correction.

Fenêtre de terminal
cut -f2 fichier.csv # INCORRECT : sur un CSV : toute la ligne ressort

Symptôme : toute la ligne s'affiche au lieu du 2ᵉ champ. Cause : sans -d, cut attend une tabulation, pas une virgule.

Fenêtre de terminal
cut -d',' -f2 fichier.csv # CORRECT : délimiteur explicite
Fenêtre de terminal
cut -d' ' -f2 fichier.txt # INCORRECT : plusieurs espaces entre colonnes

Symptôme : résultats vides ou décalés. Cause : cut traite un seul espace comme délimiteur, jamais une suite d'espaces.

Fenêtre de terminal
awk '{ print $2 }' fichier.txt # CORRECT : awk gère les espaces multiples
Fenêtre de terminal
cut -d',' -f2 fichier.csv # INCORRECT : "Alice, Bob",email : découpage faux

Symptôme : les champs contenant une virgule interne sont mal découpés. Cause : cut ne connaît pas les guillemets CSV (RFC 4180).

Fenêtre de terminal
awk -F'","' '{ print $2 }' fichier.csv # CORRECT : ou un vrai parseur : csvtool col 2 fichier.csv
Fenêtre de terminal
cut -d',' -f3,1 fichier.csv # INCORRECT : affiche dans l'ordre 1,3 : pas 3,1

Symptôme : l'ordre des champs n'est pas celui demandé. Cause : cut affiche toujours les champs dans leur ordre d'apparition.

Fenêtre de terminal
awk -F',' '{ print $3","$1 }' fichier.csv # CORRECT : awk réordonne
Fenêtre de terminal
cut -d',' -f10 fichier.csv # INCORRECT : fichier à 5 colonnes : rien ne sort

Symptôme : lignes vides, aucune sortie. Cause : cut renvoie du vide si le champ n'existe pas, sans message d'erreur.

Fenêtre de terminal
head -1 fichier.csv | tr ',' '\n' | wc -l # CORRECT : compter les colonnes d'abord
Fenêtre de terminal
cut -c1-5 fichier.txt # INCORRECT : sur du texte accentué : caractères tronqués

Symptôme : caractères coupés ou mal affichés. Cause : dans GNU coreutils, -c est aujourd'hui traité comme -b, donc il compte les octets. Un caractère accentué en occupe deux en UTF-8, un émoji jusqu'à quatre. Régler LANG sur une locale UTF-8 n'y change rien : la troncature persiste.

Fenêtre de terminal
awk '{ print substr($0, 1, 5) }' fichier.txt # CORRECT : gawk compte les caractères

Rien ne remplace la pratique. Créez l'environnement de test ci-dessous, puis déroulez les huit étapes. À la fin, nettoyez avec rm -rf ~/cut-lab.

Ce script crée quatre fichiers de test dans ~/cut-lab : un CSV, un TSV, un fichier de type passwd et un log à largeur fixe.

Fenêtre de terminal
# Créer le lab
mkdir -p ~/cut-lab
cd ~/cut-lab
# Fichier CSV (virgule)
cat > users.csv << 'EOF'
id,nom,email,role,salaire
1,Alice,alice@example.com,admin,5000
2,Bob,bob@example.com,user,3500
3,Charlie,charlie@example.com,user,3200
4,Diana,diana@example.com,moderator,4000
5,Eve,eve@example.com,admin,5500
EOF
# Fichier TSV (tabulation)
cat > data.tsv << 'EOF'
Produit Prix Stock Catégorie
Laptop 999 50 Informatique
Souris 29 200 Périphériques
Clavier 79 150 Périphériques
Écran 299 75 Informatique
EOF
# Fichier type passwd (deux-points)
cat > passwd.txt << 'EOF'
root:x:0:0:root:/root:/bin/bash
bob:x:1000:1000:Bob User:/home/bob:/bin/bash
alice:x:1001:1001:Alice Admin:/home/alice:/bin/zsh
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
EOF
# Fichier log à largeur fixe
cat > access.log << 'EOF'
192.168.1.10 2025-01-15 GET /index.html 200
192.168.1.20 2025-01-15 POST /api/users 201
192.168.1.30 2025-01-15 GET /style.css 200
192.168.1.10 2025-01-15 GET /favicon.ico 404
EOF
echo "Lab créé dans ~/cut-lab"
ls -la ~/cut-lab
  1. Extraire une colonne CSV. Extrayez la colonne nom (2ᵉ champ) du fichier users.csv.

    Fenêtre de terminal
    cut -d',' -f2 ~/cut-lab/users.csv

    -d',' définit la virgule comme délimiteur, -f2 sélectionne le 2ᵉ champ. Pour sauter l'en-tête : tail -n +2 ~/cut-lab/users.csv | cut -d',' -f2.

  2. Extraire plusieurs colonnes. Extrayez les colonnes nom et email (champs 2 et 3) de users.csv.

    Fenêtre de terminal
    cut -d',' -f2,3 ~/cut-lab/users.csv

    -f2,3 sélectionne les champs 2 et 3.

  3. Extraire une plage de colonnes. Extrayez les colonnes 2 à 4 (nom, email, role) de users.csv.

    Fenêtre de terminal
    cut -d',' -f2-4 ~/cut-lab/users.csv

    -f2-4 sélectionne les champs de 2 à 4 inclus.

  4. Fichier avec tabulation (TSV). Extrayez la colonne Prix (champ 2) du fichier data.tsv.

    Fenêtre de terminal
    cut -f2 ~/cut-lab/data.tsv

    Sans -d, cut utilise la tabulation par défaut, parfait pour un TSV.

  5. Fichier passwd (deux-points). Extrayez le nom d'utilisateur (champ 1) et le shell (champ 7) de passwd.txt.

    Fenêtre de terminal
    cut -d':' -f1,7 ~/cut-lab/passwd.txt

    Le fichier passwd utilise : comme délimiteur ; le shell est le 7ᵉ champ.

  6. Extraire par caractères. Extrayez les 12 premiers caractères de chaque ligne d'access.log (l'adresse IP).

    Fenêtre de terminal
    cut -c1-12 ~/cut-lab/access.log

    -c1-12 extrait les caractères 1 à 12, utile pour les formats à largeur fixe.

  7. Combiner avec d'autres commandes. Listez les noms des utilisateurs ayant le rôle admin dans users.csv.

    Fenêtre de terminal
    grep ',admin,' ~/cut-lab/users.csv | cut -d',' -f2

    grep filtre les lignes contenant admin, puis cut en extrait le nom.

  8. Inverser la sélection. Affichez toutes les colonnes de users.csv sauf le salaire (champ 5).

    Fenêtre de terminal
    cut -d',' -f5 --complement ~/cut-lab/users.csv

    --complement inverse la sélection : tout sauf le champ 5.

Huit exercices pour valider votre maîtrise. Tous se traitent sur les fichiers du lab ~/cut-lab (ou sur /etc/passwd). Cherchez d'abord par vous-même, puis dépliez la solution pour vous corriger.

Exercice 1, Extraire une colonne CSV. Extrayez uniquement les emails (3ᵉ colonne) de users.csv. Indice : le CSV utilise la virgule comme délimiteur.

Voir la solution
Fenêtre de terminal
cut -d',' -f3 ~/cut-lab/users.csv

-d',' définit le délimiteur virgule, -f3 sélectionne le 3ᵉ champ.

Exercice 2, Lister les utilisateurs du système. Listez les noms d'utilisateurs depuis /etc/passwd. Indice : le fichier passwd utilise : comme délimiteur, le nom est le 1ᵉʳ champ.

Voir la solution
Fenêtre de terminal
cut -d':' -f1 /etc/passwd

/etc/passwd est délimité par deux-points ; le nom d'utilisateur est le champ 1.

Exercice 3, Plusieurs colonnes. Extrayez le nom et le salaire (colonnes 2 et 5) de users.csv. Indice : séparez les numéros de champs par des virgules.

Voir la solution
Fenêtre de terminal
cut -d',' -f2,5 ~/cut-lab/users.csv

-f2,5 sélectionne les champs 2 et 5, affichés dans l'ordre du fichier.

Exercice 4, Plage de colonnes. Extrayez les colonnes 2 à 4 du fichier TSV data.tsv. Indice : pas besoin de -d pour un fichier séparé par des tabulations.

Voir la solution
Fenêtre de terminal
cut -f2-4 ~/cut-lab/data.tsv

Sans -d, cut utilise la tabulation ; -f2-4 est une plage de champs.

Exercice 5, Extraire par caractères. Extrayez les 10 premiers caractères de chaque ligne d'access.log. Indice : utilisez -c, pas -f.

Voir la solution
Fenêtre de terminal
cut -c1-10 ~/cut-lab/access.log

-c1-10 extrait les caractères 1 à 10 (positions fixes).

Exercice 6, Inverser la sélection. Affichez toutes les colonnes de users.csv sauf la 3ᵉ (email). Indice : --complement inverse la sélection.

Voir la solution
Fenêtre de terminal
cut -d',' -f3 --complement ~/cut-lab/users.csv

--complement affiche tout sauf le champ 3.

Exercice 7, Pipeline grep + cut. Listez les shells des utilisateurs dont le répertoire personnel est dans /home/. Indice : filtrez avec grep avant d'extraire avec cut.

Voir la solution
Fenêtre de terminal
grep ':/home/' /etc/passwd | cut -d':' -f7

grep filtre les lignes contenant /home/, cut en extrait le shell (champ 7).

Exercice 8, Compter les valeurs uniques. Comptez combien d'utilisateurs ont chaque rôle dans users.csv. Indice : combinez cut, sort et uniq -c.

Voir la solution
Fenêtre de terminal
cut -d',' -f4 ~/cut-lab/users.csv | tail -n +2 | sort | uniq -c

cut extrait le rôle, tail -n +2 saute l'en-tête, sort | uniq -c compte les occurrences.

Quand cut ne renvoie pas ce qu'on attend, le problème vient presque toujours du délimiteur. Voici comment diagnostiquer.

Ces quatre commandes se déroulent dans l'ordre : d'abord identifier le vrai séparateur, ensuite compter les colonnes, puis tester sur une seule ligne avant de lancer le traitement complet. cat -A est la plus utile des quatre : elle rend visible ce que l'œil ne voit pas, une tabulation (^I) déguisée en suite d'espaces, ou un retour chariot Windows (^M$) collé au dernier champ.

Fenêtre de terminal
# Afficher les caractères spéciaux pour identifier le vrai délimiteur
cat -A fichier.csv | head -1 # ^I = tabulation, $ = fin de ligne
# Compter le nombre de colonnes
head -1 fichier.csv | tr ',' '\n' | wc -l
# Tester le découpage sur une seule ligne
head -1 fichier.csv | cut -d',' -f2
# Afficher chaque champ numéroté
head -1 fichier.csv | awk -F',' '{ for (i=1; i<=NF; i++) print i": "$i }'

cut ne produit que trois messages d'erreur, tous émis avant de lire la moindre ligne. Ils portent donc sur la ligne de commande, jamais sur les données. Si cut s'exécute sans rien dire mais renvoie un résultat faux, le problème est ailleurs : mauvais délimiteur, ou champ inexistant.

Message d'erreurCause probableSolution
cut: invalid range with no endpointSyntaxe de plage incorrecte (-f- seul)Corriger : -f1-5, -f3- ou -f-3
cut: you must specify a list of bytes, characters, or fieldsAucune option -c, -b ou -fAjouter -f pour les champs ou -c pour les caractères
cut: the delimiter must be a single characterDélimiteur de plusieurs caractèresUtiliser un seul caractère, ou passer à awk

Les six tableaux ci-dessous condensent tout ce qui a été démontré plus haut. Ils sont faits pour être relus en diagonale avant d'écrire une commande, pas pour être appris par cœur.

Trois formes couvrent la quasi-totalité des usages : extraction par champ, extraction par position, et lecture depuis un pipe. Notez que le fichier est toujours le dernier argument, et qu'il peut simplement être omis quand cut reçoit ses données par l'entrée standard.

FormeRôleExemple
cut -d'X' -f N fichierExtrait le champ N avec le délimiteur Xcut -d',' -f2 data.csv
cut -c N-M fichierExtrait les caractères N à Mcut -c1-10 log.txt
cmd | cut …Extrait depuis un pipecat f.csv | cut -d',' -f1

-f, -c et -b sont mutuellement exclusives : cut refuse d'en combiner deux. -d n'a de sens qu'avec -f, il est ignoré en mode caractères. Le délimiteur doit tenir sur un seul caractère et, s'il a une signification pour le shell (|, ;, espace), il faut le protéger par des apostrophes.

OptionRôleExemple
-d'DELIM'Définit le délimiteur (défaut : tabulation)-d',' -d':' -d'|'
-fSélection par champs (avec délimiteur)-f1 -f2,4 -f1-3
-cSélection par caractères (position)-c1-10 -c5,10,15
-bSélection par octets-b1-10
-sN'affiche que les lignes avec délimiteurcut -d':' -f1 -s
--complementInverse la sélection-f3 --complement
--output-delimiterChange le délimiteur en sortie--output-delimiter=';'

La numérotation commence à 1, pas à 0 : le premier champ est -f1. Quelle que soit la forme employée, cut restitue toujours les champs dans l'ordre du fichier ; écrire -f3,1 ne réordonne rien.

FormeRôleExemple
-f NChamp N uniquement-f2
-f N,M,PChamps N, M et P-f1,3,5
-f N-MChamps N à M-f2-5
-f N-Du champ N jusqu'à la fin-f3-
-f -NDu début jusqu'au champ N-f-4

Ce mode ne convient qu'aux formats à largeur fixe : sorties de mainframe, journaux alignés à la colonne près, dumps à gabarit constant. Dès qu'une colonne peut varier d'un caractère, la découpe part de travers sur toutes les lignes suivantes. Rappel : ces positions sont comptées en octets, donc à éviter sur du texte accentué.

FormeRôleExemple
-c NCaractère N uniquement-c5
-c N-MCaractères N à M-c1-20
-c N,M,PCaractères précis, non contigus-c1,5,10

cut prend tout son intérêt au milieu d'un pipe, jamais seul. La position compte : filtrer avec grep avant cut réduit le volume traité ; sort doit précéder uniq -c, sinon le comptage ne regroupe que les doublons consécutifs. Avec xargs -I{}, pensez à un jeu de données propre : un champ vide déclencherait une commande sans argument.

EnchaînementRôleExemple
grep | cutFiltrer puis extrairegrep admin f.csv | cut -d',' -f2
cut | sort | uniqExtraire puis comptercut -d',' -f3 f.csv | sort | uniq -c
cut | xargsExtraire puis exécutercut -d':' -f1 /etc/passwd | xargs -I{} id {}

Vous maîtrisez cut lorsque vous pouvez cocher chacun de ces points :

  • Je sais extraire un champ avec -d et -f
  • Je sais extraire plusieurs champs (-f1,3,5)
  • Je sais utiliser des plages (-f2-5, -f3-, -f-4)
  • Je sais extraire par position avec -c
  • Je sais que la tabulation est le délimiteur par défaut
  • Je sais utiliser --complement pour inverser la sélection
  • Je sais combiner cut avec grep et sort
  • Je sais quand utiliser awk plutôt que cut

La commande cut est un outil simple mais efficace pour extraire des colonnes de fichiers délimités. Sa syntaxe concise en fait l'outil idéal pour les extractions rapides sur des CSV, TSV, fichiers passwd ou logs à format fixe. Pour des besoins plus complexes (espaces multiples, guillemets, calculs), préférez awk qui offre plus de flexibilité.

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn