Aller au contenu
Administration Linux medium

Maîtriser cut : Extraction de colonnes

6 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 des modèles courants pour des extractions fréquentes.

Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.

Extraire un champ Base

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

cut -d',' -f2 users.csv
Formule cut -d'DELIM' -f N <fichier>
Exemple
cut -d',' -f2 users.csv
Paramètres
  • DELIM — Caractère séparateur (virgule, deux-points...)
  • N — Numéro du champ à extraire (commence à 1)
Extraire plusieurs champs Base

Récupérer plusieurs colonnes spécifiques.

cut -d':' -f1,7 /etc/passwd
Formule cut -d'DELIM' -f N,M,P <fichier>
Exemple
cut -d':' -f1,7 /etc/passwd
Paramètres
  • N,M,P — Liste de champs séparés par des virgules
Extraire une plage de champs Base

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

cut -d',' -f2-4 data.csv
Formule cut -d'DELIM' -f N-M <fichier>
Exemple
cut -d',' -f2-4 data.csv
Paramètres
  • N-M — Du champ N au champ M inclus
Du champ N jusqu'à la fin Base

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

cut -d':' -f3- /etc/passwd
Formule cut -d'DELIM' -f N- <fichier>
Exemple
cut -d':' -f3- /etc/passwd
Paramètres
  • N- — À partir du champ N jusqu'à la fin
Du début jusqu'au champ N Base

Extraire du premier champ jusqu'à N.

cut -d',' -f-3 data.csv
Formule cut -d'DELIM' -f -N <fichier>
Exemple
cut -d',' -f-3 data.csv
Paramètres
  • -N — Du début jusqu'au champ N inclus
Extraire par position (caractères) Base

Extraire des caractères à des positions fixes.

cut -c1-15 access.log
Formule cut -c N-M <fichier>
Exemple
cut -c1-15 access.log
Paramètres
  • -c — Mode caractères (position fixe)
  • N-M — Positions des caractères
Fichiers TSV (tabulation) Base

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

cut -f2 data.tsv
Formule cut -f N <fichier.tsv>
Exemple
cut -f2 data.tsv
Paramètres
  • -f — Sans -d, utilise TAB par défaut
Inverser la sélection Inter.

Afficher tout SAUF les champs spécifiés.

cut -d',' -f3 --complement users.csv
Formule cut -d'DELIM' -f N --complement <fichier>
Exemple
cut -d',' -f3 --complement users.csv
Paramètres
  • --complement — Inverse la sélection
Changer le délimiteur en sortie Inter.

Utiliser un délimiteur différent dans le résultat.

cut -d',' -f1,3 --output-delimiter='\t' data.csv
Formule cut -d'DELIM1' -f N,M --output-delimiter='DELIM2' <fichier>
Exemple
cut -d',' -f1,3 --output-delimiter='\t' data.csv
Paramètres
  • --output-delimiter — Délimiteur pour la sortie
Pipeline avec grep Inter.

Filtrer puis extraire des colonnes.

grep ',admin,' users.csv | cut -d',' -f2
Formule grep 'PATTERN' <fichier> | cut -d'DELIM' -f N
Exemple
grep ',admin,' users.csv | cut -d',' -f2
Paramètres
  • grep — Filtre les lignes d'abord
  • cut — Extrait les colonnes ensuite
Pipeline avec sort/uniq Inter.

Extraire une colonne et compter les valeurs uniques.

cut -d',' -f4 users.csv | sort | uniq -c
Formule cut -d'DELIM' -f N <fichier> | sort | uniq -c
Exemple
cut -d',' -f4 users.csv | sort | uniq -c
Paramètres
  • sort | uniq -c — Trie et compte les occurrences
Ignorer les lignes sans délimiteur Inter.

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

cut -d':' -f1 -s mixed.txt
Formule cut -d'DELIM' -f N -s <fichier>
Exemple
cut -d':' -f1 -s mixed.txt
Paramètres
  • -s — Supprime les lignes sans délimiteur

Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.

CSV avec champs entre guillemets

cut -d',' -f2 sur "Alice, Bob",email découpe mal

Danger
Le piège : cut -d',' -f2 sur "Alice, Bob",email découpe mal
Symptôme : Les champs avec virgules internes sont mal découpés
Cause : cut ne gère pas les guillemets CSV (RFC 4180)
Correction : Utiliser un parser CSV comme csvtool ou awk
awk -F'","' '{print $2}' fichier.csv  # ou csvtool col 2 fichier.csv
Oubli du délimiteur (TAB par défaut)

cut -f2 fichier.csv ne fonctionne pas sur un CSV

Attention
Le piège : cut -f2 fichier.csv ne fonctionne pas sur un CSV
Symptôme : Toute la ligne est affichée au lieu du 2ème champ
Cause : Sans -d, cut utilise la tabulation comme délimiteur, pas la virgule
Correction : Toujours spécifier -d pour les fichiers non-TSV
cut -d',' -f2 fichier.csv
Espaces multiples comme délimiteur

cut -d' ' -f2 fichier.txt avec plusieurs espaces entre colonnes

Attention
Le piège : cut -d' ' -f2 fichier.txt avec plusieurs espaces entre colonnes
Symptôme : Résultats vides ou incorrects
Cause : cut traite UN seul espace comme délimiteur, pas plusieurs
Correction : Utiliser awk pour les espaces multiples
awk '{print $2}' fichier.txt
Les champs sortent dans l'ordre du fichier

cut -d',' -f3,1 affiche dans l'ordre 1,3 pas 3,1

Info
Le piège : cut -d',' -f3,1 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
Correction : Utiliser awk pour réordonner les colonnes
awk -F',' '{print $3","$1}' fichier.csv
Champ inexistant (numéro trop grand)

cut -d',' -f10 sur un fichier avec 5 colonnes

Info
Le piège : cut -d',' -f10 sur un fichier avec 5 colonnes
Symptôme : Lignes vides ou pas de sortie
Cause : cut retourne vide si le champ n'existe pas (pas d'erreur)
Correction : Vérifier le nombre de colonnes avec head et compter
head -1 fichier.csv | tr ',' '\n' | wc -l  # compte les colonnes
Caractères UTF-8 multi-octets

cut -c1-5 sur du texte avec accents compte mal

Info
Le piège : cut -c1-5 sur du texte avec accents compte mal
Symptôme : Caractères tronqués ou mal affichés
Cause : -c compte les octets, pas les caractères Unicode
Correction : Vérifier que LANG est UTF-8 ou utiliser des outils Unicode-aware
echo $LANG  # doit contenir UTF-8

📋 Cheatsheet cut

📝 Syntaxe :

cut -d'X' -f N fichier Extrait le champ N avec délimiteur X
cut -c N-M fichier Extrait les caractères N à M
cmd | cut ... Depuis un pipe

🚀 Commandes types :

Extraire un champ Récupérer une seule colonne d'un fichier délimité.
cut -d',' -f2 users.csv
Extraire plusieurs champs Récupérer plusieurs colonnes spécifiques.
cut -d':' -f1,7 /etc/passwd
Extraire une plage de champs Récupérer une série de colonnes consécutives.
cut -d',' -f2-4 data.csv
Du champ N jusqu'à la fin Extraire à partir d'un champ jusqu'au dernier.
cut -d':' -f3- /etc/passwd
Du début jusqu'au champ N Extraire du premier champ jusqu'à N.
cut -d',' -f-3 data.csv

⚙️ Options

-d'DELIM' Définit le délimiteur (défaut: TAB) -d',' -d':' -d'|'
-f Sélectionne par champs (avec délimiteur) -f1 -f2,4 -f1-3
-c Sélectionne par caractères (position) -c1-10 -c5,10,15
-b Sélectionne par octets -b1-10
-s N'affiche que les lignes avec délimiteur cut -d':' -f1 -s
--complement Inverse la sélection -f3 --complement
--output-delimiter Change le délimiteur en sortie --output-delimiter=';'

🔍 Filtres

-f N Champ N uniquement -f2
-f N,M,P Champs N, M et P -f1,3,5
-f N-M Champs N à M -f2-5
-f N- Du champ N jusqu'à la fin -f3-
-f -N Du début jusqu'au champ N -f-4

⚡ Actions

-c N Caractère N uniquement -c5
-c N-M Caractères N à M -c1-20
-c N,M,P Caractères spécifiques -c1,5,10

🔗 Composition

grep | cut Filtrer puis extraire grep admin f.csv | cut -d',' -f2
cut | sort | uniq Extraire et compter cut -d',' -f3 f.csv | sort | uniq -c
cut | xargs Extraire et exécuter cut -d':' -f1 /etc/passwd | xargs -I{} id {}

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.