Commande Linux cut : Découpage de texte

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à utiliser la commande cut sous Linux pour extraire et analyser des données à partir de fichiers texte. Nous allons simuler un scénario où vous travaillez dans une librairie locale et devez traiter les informations sur les clients et les livres. La commande cut vous aidera à extraire des colonnes ou des champs spécifiques de vos fichiers de données, permettant ainsi une gestion et une analyse efficaces des données.

Prérequis

Avant de commencer ce laboratoire, assurez-vous d'avoir :

  • Une connaissance de base de la ligne de commande Linux
  • Accès à un terminal Linux (ce laboratoire suppose que vous utilisez un terminal dans le répertoire /home/labex/project)
Ceci est un Guided Lab, qui fournit des instructions étape par étape pour vous aider à apprendre et à pratiquer. Suivez attentivement les instructions pour compléter chaque étape et acquérir une expérience pratique. Les données historiques montrent que c'est un laboratoire de niveau débutant avec un taux de réussite de 94.09%. Il a reçu un taux d'avis positifs de 99.42% de la part des apprenants.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/cut("Text Cutting") subgraph Lab Skills linux/cut -.-> lab-219187{{"Commande Linux cut : Découpage de texte"}} end

Comprendre les données de la librairie

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

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

cat /home/labex/project/customers.txt

Vous devriez voir une sortie similaire à ceci :

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

Maintenant, regardons le fichier books.txt :

cat /home/labex/project/books.txt

La sortie 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 (CSV - Comma-Separated Values) avec différents champs pour les clients et les livres.

Si vous ne voyez pas la sortie attendue ou 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 manquent, vous devrez peut-être les créer manuellement ou contacter l'administrateur de votre laboratoire

Extraire les noms des clients

Maintenant que nous avons vu nos données, utilisons la commande cut pour extraire des informations spécifiques. Nous commencerons par extraire les noms des clients à partir 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

Décortiquons cette commande :

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

Vous devriez voir une sortie comme celle-ci :

Name
John Doe
Jane Smith
Lily Chen
Andy Brown

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

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

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

Ce pipeline effectue deux opérations :

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

La sortie devrait maintenant être :

John Doe
Jane Smith
Lily Chen
Andy Brown

Si vous ne voyez pas la sortie attendue :

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

Extraire plusieurs champs

Souvent, nous devons extraire plusieurs champs de nos données. Extraisons à 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 maintenant nous spécifions deux champs dans l'option -f :

  • -f 2,3 : Extraire le deuxième et le troisième champ (nom et âge)

Votre sortie devrait ressembler à ceci :

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

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

Si votre sortie ne correspond pas :

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

Extraire une plage de champs

La commande cut nous permet également d'extraire une plage de champs. Extraisons tous les champs de l'identifiant du client jusqu'à l'âge (champs 1 à 3) à partir du fichier customers.txt.

Utilisez cette commande :

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

Voici ce qui est nouveau dans cette commande :

  • -f 1-3 : Cela spécifie une plage de champs allant de 1 à 3, inclus

Votre sortie devrait ressembler à ceci :

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

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

Si vous ne voyez pas la sortie attendue :

  • Vérifiez que vous avez utilisé un tiret (-) 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 (par exemple, -f 1, -f 2, -f 3) pour vérifier si tous les champs sont présents dans le fichier

Travailler avec des champs de largeur fixe

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

Créons un nouveau fichier avec des données de 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 nouveau fichier nommé inventory.txt avec des données de largeur fixe.

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

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

Voici ce qui est nouveau :

  • -c 11-25 : Cela indique à cut d'extraire les caractères de la position 11 à la position 25 de chaque ligne

Vous devriez voir :

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

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

Si vous n'obtenez pas la sortie attendue :

  • Assurez-vous que le fichier inventory.txt a été créé correctement (vous pouvez vérifier avec 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 de caractères 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 commandes Linux. Utilisons cut avec grep pour trouver tous les livres dont le prix dépasse 20 dollars 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 opérations :

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

Vous devriez voir une sortie similaire à :

Mystery in the Woods
Science Explained

Si vous ne voyez pas la sortie attendue :

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

Résumé

Dans ce laboratoire (lab), vous avez appris à utiliser la commande cut sous Linux pour extraire des données spécifiques à partir de fichiers texte. Vous avez pratiqué :

  • L'extraction de champs individuels à partir de fichiers CSV
  • L'extraction de plusieurs champs et de plages de champs
  • Le travail avec des données de largeur fixe
  • La combinaison de cut avec d'autres commandes telles que grep

Ces compétences sont inestimables pour le traitement et l'analyse de données dans diverses situations, allant de la gestion de l'inventaire d'une librairie à la manipulation de tout type de données textuelles structurées.

Paramètres supplémentaires de la commande cut non couverts dans ce laboratoire :

  • -s : Supprimer les lignes ne contenant pas de délimiteurs
  • --output-delimiter=STRING : Utiliser STRING comme délimiteur de sortie
  • --complement : Compléter l'ensemble des octets, caractères ou champs sélectionné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 pour la commande cut si vous avez besoin de plus d'informations.

Ressources