Aller au contenu
Administration Linux medium

cut : extraire des colonnes

22 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 simplecut -d',' -f2✅ mais overkill
Délimiteur unique et fixe✅ Parfait
Espaces multiples comme délimiteurawk '{print $2}'
CSV avec guillemets✅ (ou csvtool)
Réordonner les colonnesawk '{print $3,$1}'
Calculs sur les colonnesawk '{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.

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

cut propose deux modes principaux :

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.

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) :

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
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=';'
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
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

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 # ❌ 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 # ✅ délimiteur explicite
Fenêtre de terminal
cut -d' ' -f2 fichier.txt # ❌ 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 # ✅ awk gère les espaces multiples
Fenêtre de terminal
cut -d',' -f2 fichier.csv # ❌ "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 # ✅ ou un vrai parseur : csvtool col 2 fichier.csv
Fenêtre de terminal
cut -d',' -f3,1 fichier.csv # ❌ 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 # ✅ awk réordonne
Fenêtre de terminal
cut -d',' -f10 fichier.csv # ❌ 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 # ✅ compter les colonnes d'abord
Fenêtre de terminal
cut -c1-5 fichier.txt # ❌ sur du texte accentué : caractères tronqués

Symptôme : caractères coupés ou mal affichés. Cause : -c compte les octets, pas les caractères Unicode.

Fenêtre de terminal
echo $LANG # ✅ doit contenir UTF-8 ; sinon, utiliser un outil Unicode-aware

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.

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 }'
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
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
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=';'
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
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
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

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80% 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

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é.

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn