Vous avez un fichier CSV, une sortie de commande ou un log, et vous voulez récupérer seulement une colonne sans sortir un script complet ? C’est exactement le rôle de cut. La commande est simple, rapide, et très pratique quand le format de départ est propre.
Dans ce guide, je vous montre comment utiliser cut avec un délimiteur, comment extraire des caractères précis, et surtout dans quels cas il vaut mieux passer à awk ou sed. cut découpe très bien, mais il ne devine pas les fichiers mal formés.
À quoi sert cut sous Linux ?
cut lit chaque ligne, puis garde seulement la partie demandée. Vous pouvez travailler par caractères avec -c, par octets avec -b, ou par champs avec -f. Dans la pratique, c’est surtout -f avec -d qui sert le plus.
cut -d ':' -f 1 /etc/passwd
Ici, -d ':' indique que les champs sont séparés par deux-points. -f 1 demande le premier champ. Sur /etc/passwd, cela affiche les noms des comptes locaux.
Avant d’utiliser cut sur un fichier système, commencez par afficher quelques lignes. Ça évite de raisonner sur un format que vous n’avez pas vérifié.
head -5 /etc/passwd
Extraire une colonne avec un délimiteur
La syntaxe la plus utile ressemble à ceci :
cut -d 'DELIMITEUR' -f NUMERO fichier
Exemple avec un fichier CSV très simple :
cat utilisateurs.csv
nom,email,role
alice,[email protected],admin
marc,[email protected],lecture
Pour extraire la deuxième colonne :
cut -d ',' -f 2 utilisateurs.csv
Résultat attendu :
email
[email protected]
[email protected]
Vous pouvez aussi demander plusieurs champs :
cut -d ',' -f 1,3 utilisateurs.csv
Ou une plage :
cut -d ',' -f 1-2 utilisateurs.csv
Attention : cut compte les champs à partir de 1, pas de 0. C’est bête, mais c’est une source d’erreur classique quand on passe d’un langage de script à une commande shell.
Travailler sur une sortie de commande
cut devient intéressant avec un tube. Exemple simple : récupérer seulement les noms d’utilisateurs locaux depuis /etc/passwd.
cat /etc/passwd | cut -d ':' -f 1
On peut écrire plus court sans cat :
cut -d ':' -f 1 /etc/passwd
Autre exemple : extraire les points de montage depuis une sortie propre de df.
df -h --output=source,pcent,target | tail -n +2
Dans ce cas précis, cut n’est pas le meilleur choix, car les colonnes sont alignées avec des espaces variables. Pour ce type de sortie, awk est souvent plus fiable :
df -h --output=source,pcent,target | awk 'NR>1 {print $2, $3}'
C’est la limite à retenir : cut fonctionne très bien quand le séparateur est clair et stable. Si les espaces changent selon la longueur des colonnes, ne forcez pas.
Extraire des caractères précis
Avec -c, vous pouvez extraire des positions de caractères. C’est utile pour des fichiers à largeur fixe, ou pour vérifier rapidement un préfixe.
echo "serveur-prod-01" | cut -c 1-7
Résultat :
serveur
Quelques formes utiles :
cut -c 1-5 fichier.txt
cut -c 8- fichier.txt
cut -c -10 fichier.txt
La première commande garde les caractères 1 à 5. La deuxième garde du caractère 8 jusqu’à la fin. La troisième garde du début jusqu’au caractère 10.
Les pièges avec les CSV et les espaces
Le piège le plus fréquent concerne les vrais CSV. Si une colonne contient une virgule entre guillemets, cut ne comprend pas la logique CSV. Il découpe quand même à chaque virgule.
nom,commentaire
alice,"admin, accès complet"
Dans cet exemple, cut -d ',' -f 2 ne donnera pas un résultat fiable. Pour un vrai CSV, utilisez plutôt un outil qui sait lire le format, par exemple Python, Miller, csvkit, ou un traitement adapté à votre environnement.
Autre piège : le séparateur par défaut de cut pour les champs est la tabulation, pas l’espace. Si vous testez une commande avec des espaces, indiquez le délimiteur explicitement.
echo "web01 prod actif" | cut -d ' ' -f 2
Cette commande renvoie prod. Mais si la ligne contient plusieurs espaces successifs, cut compte aussi les champs vides. Là encore, awk devient souvent plus propre.
Un exemple utile sur des logs
Sur un serveur, vous pouvez combiner journalctl, grep et cut pour isoler une partie d’une ligne. Exemple volontairement simple : récupérer les premières colonnes horaires d’un export.
journalctl -u ssh -n 20 --no-pager | cut -d ' ' -f 1-3
Ce n’est pas une analyse complète de logs, mais ça peut suffire pour vérifier rapidement les heures ou préparer une sortie courte à copier dans un ticket. Pour un diagnostic plus complet, j’ai détaillé l’usage de journalctl sur le dernier démarrage Linux.
Quand passer à awk plutôt que cut ?
Utilisez cut quand le fichier est simple : séparateur unique, colonnes stables, besoin rapide. Passez à awk quand vous devez filtrer, calculer, ignorer des lignes, gérer des espaces variables ou appliquer une condition.
# cut suffit
cut -d ':' -f 1 /etc/passwd
# awk devient plus utile
awk -F ':' '$3 >= 1000 {print $1}' /etc/passwd
La documentation de cut(1) détaille les options disponibles. Pour un usage quotidien, retenez surtout -d, -f et -c.
Ma règle simple : si vous pouvez expliquer le découpage en une phrase, cut est probablement suffisant. Si vous commencez à ajouter des exceptions dans votre tête, prenez directement awk ou un vrai script. Vous perdrez moins de temps.