Commande Linux cut : Découpage de texte

LinuxBeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous allez apprendre à utiliser la commande cut sous Linux pour extraire et analyser des données provenant de fichiers texte. Nous allons simuler un scénario dans lequel vous travaillez pour une librairie locale et devez traiter des informations relatives aux clients et aux livres. La commande cut vous aidera à extraire des colonnes ou des champs spécifiques de vos fichiers de données, facilitant ainsi une gestion et une analyse efficaces de vos informations.

Prérequis

Avant de commencer cet atelier, assurez-vous de disposer des éléments suivants :

  • Une connaissance de base de la ligne de commande Linux.
  • Un accès à un terminal Linux (cet atelier suppose que vous utilisez un terminal dans le répertoire /home/labex/project).

Comprendre les données de la librairie

Commençons par examiner les fichiers de données de la librairie. Nous disposons de deux fichiers : customers.txt et books.txt.

Tout d'abord, affichons le contenu du fichier customers.txt :

cat /home/labex/project/customers.txt

Vous devriez voir un résultat similaire à celui-ci :

ID,Name,Age,Email
1,John Doe,25,john.doe@email.com
2,Jane Smith,35,jane.smith@email.com
3,Lily Chen,30,lily.chen@email.com
4,Andy Brown,22,andy.brown@email.com

À présent, examinons le fichier books.txt :

cat /home/labex/project/books.txt

Le résultat devrait ressembler à ceci :

ISBN,Title,Author,Price
978-1234567890,The Great Adventure,Alice Writer,19.99
978-2345678901,Mystery in the Woods,Bob Author,24.99
978-3456789012,Cooking Basics,Carol Chef,15.99
978-4567890123,Science Explained,David Scientist,29.99

Ces fichiers contiennent des valeurs séparées par des virgules (format CSV) avec différents champs pour les clients et les livres.

Si vous ne voyez pas le résultat attendu ou si vous rencontrez une erreur, vérifiez les points suivants :

  • Assurez-vous d'être dans le bon répertoire (/home/labex/project).
  • Vérifiez que les fichiers existent en exécutant ls -l.
  • Si les fichiers sont manquants, vous devrez peut-être les créer manuellement ou contacter l'administrateur de votre atelier.

Extraire les noms des clients

Maintenant que nous avons pris connaissance de nos données, utilisons la commande cut pour extraire des informations spécifiques. Nous allons commencer par extraire les noms des clients du fichier customers.txt.

La commande cut utilise l'option -d pour spécifier un délimiteur (dans notre cas, une virgule) et l'option -f pour sélectionner le ou les champs à afficher.

Exécutez la commande suivante :

cut -d ',' -f 2 /home/labex/project/customers.txt

Analysons cette commande :

  • cut : Le nom de la commande utilisée.
  • -d ',' : Spécifie que nous utilisons la virgule comme séparateur entre les champs.
  • -f 2 : Indique à cut d'extraire le deuxième champ.
  • /home/labex/project/customers.txt : Le chemin vers notre fichier source.

Vous devriez obtenir le résultat suivant :

Name
John Doe
Jane Smith
Lily Chen
Andy Brown

Remarquez que l'en-tête "Name" est également inclus. C'est parce que cut traite la ligne d'en-tête exactement comme n'importe quelle autre ligne du fichier.

Si vous souhaitez exclure l'en-tête, vous pouvez combiner la commande tail avec cut :

cut -d ',' -f 2 /home/labex/project/customers.txt | tail -n +2

Ce pipeline effectue deux actions :

  1. cut extrait le deuxième champ (les noms) de chaque ligne.
  2. tail -n +2 affiche le résultat à partir de la deuxième ligne, ignorant ainsi l'en-tête.

Le résultat devrait maintenant être :

John Doe
Jane Smith
Lily Chen
Andy Brown

Si vous n'obtenez pas le résultat escompté :

  • Vérifiez que vous avez saisi la commande exactement comme indiqué.
  • Assurez-vous que le fichier customers.txt n'a pas été modifié.
  • Essayez de réexécuter cat /home/labex/project/customers.txt pour vérifier le contenu du fichier.

Extraire plusieurs champs

Il est fréquent de devoir extraire plusieurs champs simultanément. Extrayons à la fois les noms et les âges des clients à partir du fichier customers.txt.

Utilisez la commande suivante :

cut -d ',' -f 2,3 /home/labex/project/customers.txt

Cette commande est similaire à la précédente, mais nous spécifions maintenant deux champs dans l'option -f :

  • -f 2,3 : Extrait les deuxième et troisième champs (nom et âge).

Votre résultat devrait ressembler à ceci :

Name,Age
John Doe,25
Jane Smith,35
Lily Chen,30
Andy Brown,22

Comme vous pouvez le constater, nous pouvons spécifier plusieurs champs en les séparant par des virgules dans l'option -f. Le résultat conserve le délimiteur d'origine (la virgule) entre les champs extraits.

Si votre résultat ne correspond pas :

  • Assurez-vous d'avoir bien inclus la virgule entre 2 et 3 dans l'option -f.
  • Vérifiez que le fichier customers.txt n'a pas été altéré.
  • Essayez d'exécuter la commande sans l'option -d ',' pour voir si le fichier utilise un délimiteur différent.

Extraire une plage de champs

La commande cut permet également d'extraire une plage de champs consécutifs. Extrayons tous les champs allant de l'ID du client jusqu'à l'âge (champs 1 à 3) dans le fichier customers.txt.

Utilisez cette commande :

cut -d ',' -f 1-3 /home/labex/project/customers.txt

Voici la nouveauté dans cette commande :

  • -f 1-3 : Spécifie une plage de champs allant de 1 à 3 inclus.

Votre résultat devrait ressembler à :

ID,Name,Age
1,John Doe,25
2,Jane Smith,35
3,Lily Chen,30
4,Andy Brown,22

Cette commande extrait la plage de champs de 1 à 3. Vous pouvez également combiner des plages et des champs individuels, par exemple -f 1-3,5 pour extraire les champs 1, 2, 3 et 5.

Si vous ne voyez pas le résultat attendu :

  • Vérifiez que vous avez utilisé un trait d'union (-) entre 1 et 3 dans l'option -f.
  • Assurez-vous que le fichier customers.txt n'a pas été modifié.
  • Essayez d'extraire chaque champ individuellement (ex: -f 1, -f 2, -f 3) pour vérifier que tous les champs sont présents.

Travailler avec des champs à largeur fixe

Parfois, les données ne sont pas séparées par des délimiteurs mais sont organisées en colonnes de largeur fixe. La commande cut peut également gérer ce cas de figure en utilisant l'option -c pour spécifier les positions des caractères.

Créons un nouveau fichier avec des données à largeur fixe :

cat << EOF > /home/labex/project/inventory.txt
ISBN     Title          Quantity
1234567890The Great Adv      100
2345678901Mystery in th       75
3456789012Cooking Basi       50
4567890123Science Exp        125
EOF

Cette commande utilise un "here-document" (<<EOF) pour créer un fichier nommé inventory.txt contenant des données alignées par colonnes.

Maintenant, extrayons uniquement les titres des livres en utilisant les positions des caractères :

cut -c 11-25 /home/labex/project/inventory.txt

Voici l'explication :

  • -c 11-25 : Indique à cut d'extraire les caractères situés entre la 11ème et la 25ème position sur chaque ligne.

Vous devriez voir :

itle          Q
The Great Adv
Mystery in th
Cooking Basi
Science Exp

Cette commande extrait les caractères 11 à 25 de chaque ligne, ce qui correspond au champ du titre dans nos données à largeur fixe.

Si vous n'obtenez pas le résultat attendu :

  • Vérifiez que le fichier inventory.txt a été créé correctement (utilisez cat /home/labex/project/inventory.txt).
  • Vérifiez que vous avez utilisé la bonne plage de caractères (11-25).
  • Essayez d'ajuster la plage si les titres semblent décalés.

Combiner cut avec d'autres commandes

La commande cut devient encore plus puissante lorsqu'elle est combinée avec d'autres outils Linux. Utilisons cut avec grep pour trouver tous les livres dont le prix est supérieur à 20 $ et afficher leurs titres.

Exécutez cette commande :

grep -E ',[2-9][0-9]\.[0-9]{2}$' /home/labex/project/books.txt | cut -d ',' -f 2

Ce pipeline de commandes effectue deux étapes :

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$' : Utilise une expression régulière pour trouver les lignes où le prix est de 20 $ ou plus.
    • ,[2-9][0-9]\.[0-9]{2}$ : Recherche une virgule, suivie d'un nombre de 20 à 99, d'un point décimal et de deux chiffres à la fin de la ligne.
  2. cut -d ',' -f 2 : Extrait uniquement le titre du livre (deuxième champ) à partir des lignes filtrées par grep.

Vous devriez voir un résultat similaire à :

Mystery in the Woods
Science Explained

Si vous ne voyez pas le résultat attendu :

  • Vérifiez que le fichier books.txt contient les bonnes données.
  • Vérifiez que vous avez saisi l'expression régulière de grep correctement.
  • Essayez d'exécuter la commande grep seule pour voir quelles lignes elle sélectionne.
  • Assurez-vous que la commande cut cible bien le deuxième champ.

Résumé

Dans cet atelier, vous avez appris à utiliser la commande cut sous Linux pour extraire des données spécifiques de fichiers texte. Vous vous êtes exercé à :

  • Extraire des champs uniques de fichiers CSV.
  • Extraire plusieurs champs et des plages de champs.
  • Travailler avec des données à largeur fixe.
  • Combiner cut avec d'autres commandes comme grep.

Ces compétences sont précieuses pour le traitement et l'analyse de données dans divers scénarios, qu'il s'agisse de gérer l'inventaire d'une librairie ou de manipuler n'importe quel type de texte structuré.

Autres paramètres de la commande cut non abordés dans cet atelier :

  • -s : Ignore les lignes ne contenant pas le délimiteur.
  • --output-delimiter=CHAINE : Utilise CHAINE comme délimiteur de sortie.
  • --complement : Extrait l'inverse de la sélection (tous les octets, caractères ou champs sauf ceux spécifiés).

Pour approfondir vos connaissances, essayez d'expérimenter avec ces paramètres supplémentaires et créez vos propres fichiers de données pour vous entraîner. N'oubliez pas que la commande man cut fournit un manuel complet si vous avez besoin de plus d'informations.

Ressources