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 àcutd'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 :
cutextrait le deuxième champ (les noms) de chaque lignetail -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 ne voyez pas le résultat attendu :
- Vérifiez que vous avez tapé la commande exactement comme indiqué
- Assurez-vous que le fichier
customers.txtn'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.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 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.txtn'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 àcutd'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.txta été créé correctement (vous pouvez vérifier aveccat /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 :
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
cut -d ',' -f 2: Extrait uniquement le titre du livre (deuxième champ) des lignes trouvé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 données correctes - Vérifiez que vous avez saisi l'expression régulière
grepcorrectement - Essayez d'exécuter la commande
grepseule pour voir quelles lignes elle sélectionne - Assurez-vous que la commande
cutspé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
cutavec d'autres commandes commegrep
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.



