Commande Linux cut : Découpage de texte

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à utiliser la commande cut sous Linux pour extraire et analyser des données issues de fichiers texte. Nous simulerons un scénario où vous travaillez dans une librairie locale et devez traiter des 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, facilitant ainsi une gestion et une analyse efficaces.

Prérequis

Avant de commencer ce laboratoire, assurez-vous de disposer des éléments suivants :

  • Une familiarité de base avec la ligne de commande Linux
  • Un accès à un terminal Linux (ce laboratoire 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 obtenir 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

Maintenant, 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 (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 votre administrateur de laboratoire

Extraire les noms des clients

Maintenant que nous avons visualisé 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 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 un résultat comme celui-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 exactement 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 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 ne voyez pas le résultat attendu :

  • 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 avons besoin d'extraire plusieurs champs de nos données. Extrayons à la fois les noms et les âges des clients 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 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 nous permet également d'extraire une plage de champs. Extrayons tous les champs de l'ID client jusqu'à l'âge (champs 1 à 3) 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 de 1 à 3, inclus

Votre résultat 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 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 (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 à largeur fixe

Parfois, les données ne sont pas séparées par des délimiteurs mais sont disposées en colonnes à largeur fixe. La commande cut peut également gérer cela, 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 document en ligne (here-document, <<EOF) pour créer un nouveau fichier nommé inventory.txt contenant des données à largeur fixe.

Maintenant, extrayons 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 11 à 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 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 :

  • 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 plage de caractères correcte (11-25)
  • Essayez d'ajuster la plage de caractères si les titres semblent mal aligné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 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 opérations :

  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}$ : 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 : Extrait uniquement le titre du livre (deuxième champ) des lignes trouvé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 données correctes
  • Vérifiez que vous avez saisi l'expression régulière grep correctement
  • 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, vous avez appris à utiliser la commande cut sous Linux pour extraire des données spécifiques à partir de fichiers texte. Vous vous êtes exercé à :

  • Extraire des champs uniques à partir 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 inestimables pour le traitement et l'analyse de données dans divers scénarios, de la gestion de l'inventaire d'une librairie au traitement de tout type de données textuelles structurées.

Autres paramètres de la commande cut non abordés dans ce laboratoire :

  • -s : Supprime les lignes ne contenant pas de délimiteurs
  • --output-delimiter=STRING : Utilise STRING comme délimiteur de sortie
  • --complement : Complète l'ensemble des octets, caractères ou champs sélectionnés

Pour approfondir votre apprentissage, essayez d'expérimenter 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 sur la commande cut si vous avez besoin de plus d'informations.