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 àcutd'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 :
cutextrait le deuxième champ (les noms) de chaque ligne.tail -n +2affiche 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.txtn'a pas été modifié. - Essayez de réexécuter
cat /home/labex/project/customers.txtpour 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.txtn'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.txtn'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 àcutd'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.txta été créé correctement (utilisezcat /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 :
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.
cut -d ',' -f 2: Extrait uniquement le titre du livre (deuxième champ) à partir des lignes filtrées pargrep.
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.txtcontient les bonnes données. - Vérifiez que vous avez saisi l'expression régulière de
grepcorrectement. - Essayez d'exécuter la commande
grepseule pour voir quelles lignes elle sélectionne. - Assurez-vous que la commande
cutcible 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
cutavec d'autres commandes commegrep.
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.



