Découpage de texte sous Linux

LinuxBeginner
Pratiquer maintenant

Introduction

Bienvenue dans le laboratoire de découpage de texte Linux. Dans ce laboratoire, vous apprendrez à utiliser la commande cut sous Linux pour extraire des parties spécifiques de fichiers texte. La commande cut est un outil puissant de traitement de texte qui vous permet d'extraire des sections de chaque ligne de fichiers ou de données transmises via un tuyau (pipe).

Vous apprendrez à utiliser différentes options de la commande cut pour extraire du texte en fonction de délimiteurs et de positions de caractères. Cette compétence est particulièrement utile lorsque vous travaillez avec des fichiers texte structurés tels que des fichiers CSV, des fichiers journaux (log files) ou tout type de données respectant un format cohérent.

À la fin de ce laboratoire, vous serez en mesure d'extraire et de manipuler efficacement des données textuelles dans des environnements Linux, ce qui est une compétence fondamentale pour l'administration système, le traitement de données et les tâches d'automatisation.

Comprendre l'utilisation de base de la commande cut

Dans cette étape, vous apprendrez l'utilisation de base de la commande cut. La commande cut sous Linux est utilisée pour extraire des sections de chaque ligne de fichiers ou de données transmises via un tuyau (pipe).

Commençons par créer un simple fichier de données avec lequel nous pouvons travailler :

cd ~/project
echo "name:age:city:occupation" > data/users.txt
echo "Alice:25:New York:Engineer" >> data/users.txt
echo "Bob:30:San Francisco:Designer" >> data/users.txt
echo "Charlie:22:Chicago:Student" >> data/users.txt
echo "Diana:28:Boston:Doctor" >> data/users.txt

Les commandes ci-dessus créent un fichier nommé users.txt dans le répertoire ~/project/data avec cinq lignes de valeurs séparées par des deux-points.

Maintenant, examinons le contenu de ce fichier :

cat data/users.txt

Vous devriez voir la sortie suivante :

name:age:city:occupation
Alice:25:New York:Engineer
Bob:30:San Francisco:Designer
Charlie:22:Chicago:Student
Diana:28:Boston:Doctor

Utilisation de cut avec un délimiteur

La façon la plus courante d'utiliser cut est avec un délimiteur pour extraire des champs spécifiques. La syntaxe de base est :

cut -d'delimiter' -f fields file

Où :

  • -d spécifie le caractère délimiteur
  • -f spécifie le ou les champs à extraire
  • file est le fichier d'entrée

Extraisons les noms (premier champ) de notre fichier de données :

cut -d':' -f1 data/users.txt

Cette commande indique à cut de :

  • Utiliser : comme délimiteur (-d':')
  • Extraire le premier champ (-f1)
  • Du fichier data/users.txt

Vous devriez voir la sortie suivante :

name
Alice
Bob
Charlie
Diana

Maintenant, extraisons les âges (deuxième champ) :

cut -d':' -f2 data/users.txt

Sortie :

age
25
30
22
28

Extraction de plusieurs champs

Vous pouvez extraire plusieurs champs en les spécifiant sous forme de liste séparée par des virgules :

cut -d':' -f1,3 data/users.txt

Cela extrait le premier et le troisième champ (nom et ville) :

name:city
Alice:New York
Bob:San Francisco
Charlie:Chicago
Diana:Boston

Extraction d'une plage de champs

Vous pouvez également extraire une plage de champs en utilisant un tiret :

cut -d':' -f2-4 data/users.txt

Cela extrait les champs 2 à 4 (âge, ville et occupation) :

age:city:occupation
25:New York:Engineer
30:San Francisco:Designer
22:Chicago:Student
28:Boston:Doctor

Combinaison avec d'autres commandes

La commande cut peut être combinée avec d'autres commandes en utilisant des tuyaux (pipes). Par exemple, pour extraire seulement les âges des personnes qui sont ingénieurs :

grep "Engineer" data/users.txt | cut -d':' -f2

Sortie :

25

Essayez d'expérimenter avec différentes combinaisons de champs pour vous familiariser avec la commande.

Découpage par position de caractère

En plus de découper des champs en fonction de délimiteurs, la commande cut peut également extraire du texte en fonction des positions de caractères. Cela est utile lorsque vous travaillez avec des formats de données à largeur fixe ou lorsque vous avez besoin d'extraire des caractères spécifiques de chaque ligne.

Création de données à largeur fixe

Créons un nouveau fichier avec des données à largeur fixe pour démontrer cette fonctionnalité :

cd ~/project
echo "ID  Name      Department  Salary" > data/employees.txt
echo "001 John      IT          75000" >> data/employees.txt
echo "002 Mary      HR          65000" >> data/employees.txt
echo "003 Steve     Sales       85000" >> data/employees.txt
echo "004 Jennifer  Marketing   70000" >> data/employees.txt

Maintenant, examinons ce fichier :

cat data/employees.txt

Vous devriez voir :

ID  Name      Department  Salary
001 John      IT          75000
002 Mary      HR          65000
003 Steve     Sales       85000
004 Jennifer  Marketing   70000

Extraction par position de caractère

Pour extraire du texte en fonction des positions de caractères, utilisez l'option -c suivie des positions que vous souhaitez extraire. La syntaxe est :

cut -c positions file

Extraisons les identifiants des employés (les 3 premiers caractères) de notre fichier de données :

cut -c1-3 data/employees.txt

Cette commande indique à cut d'extraire les caractères de la position 1 à la position 3 de chaque ligne. Vous devriez voir :

ID
001
002
003
004

Extraction de caractères spécifiques

Vous pouvez également extraire des caractères spécifiques non consécutifs :

cut -c1,5,9 data/employees.txt

Cela extrait le 1er, le 5ème et le 9ème caractère de chaque ligne :

I N
0 J
0 M
0 S
0 J

Extraction depuis une position spécifique jusqu'à la fin

Pour extraire des caractères depuis une certaine position jusqu'à la fin de la ligne, utilisez un tiret après le numéro de position :

cut -c5- data/employees.txt

Cela extrait les caractères de la position 5 jusqu'à la fin de chaque ligne :

Name      Department  Salary
John      IT          75000
Mary      HR          65000
Steve     Sales       85000
Jennifer  Marketing   70000

Combinaison de l'extraction par position de caractère avec le piping

Vous pouvez combiner la commande cut avec d'autres commandes en utilisant des tuyaux (pipes). Par exemple, pour extraire seulement les noms de département (caractères 13 - 22) des employés ayant un salaire supérieur à 70000 :

grep -E "[7-9][0-9]000" data/employees.txt | cut -c13-22

Cela devrait afficher :

IT
Sales

Exercice de pratique

Essayez d'extraire seulement les noms (caractères 5 - 12) du fichier des employés :

cut -c5-12 data/employees.txt

Vous devriez voir :

Name
John
Mary
Steve
Jennifer

Comme vous pouvez le voir, le découpage par position de caractère est particulièrement utile pour le traitement de formats de données à largeur fixe où chaque champ occupe un nombre spécifique de caractères dans chaque ligne.

Combinaison de la commande cut avec d'autres outils de traitement de texte

Dans cette étape, vous apprendrez à combiner la commande cut avec d'autres commandes de traitement de texte Linux pour effectuer des tâches plus complexes d'extraction et de manipulation de données.

Création d'un fichier de données CSV

Tout d'abord, créons un fichier CSV (Comma-Separated Values, valeurs séparées par des virgules) avec lequel travailler :

cd ~/project
echo "Date,Product,Quantity,Price,Total" > data/sales.csv
echo "2023-01-15,Laptop,5,1200,6000" >> data/sales.csv
echo "2023-01-16,Mouse,20,25,500" >> data/sales.csv
echo "2023-01-17,Keyboard,15,50,750" >> data/sales.csv
echo "2023-01-18,Monitor,8,200,1600" >> data/sales.csv
echo "2023-01-19,Headphones,12,80,960" >> data/sales.csv

Vérifions le contenu de ce fichier :

cat data/sales.csv

Vous devriez voir :

Date,Product,Quantity,Price,Total
2023-01-15,Laptop,5,1200,6000
2023-01-16,Mouse,20,25,500
2023-01-17,Keyboard,15,50,750
2023-01-18,Monitor,8,200,1600
2023-01-19,Headphones,12,80,960

Combinaison de cut avec grep

Vous pouvez utiliser grep pour trouver les lignes contenant des motifs spécifiques, puis utiliser cut pour extraire des champs spécifiques de ces lignes :

grep "Laptop" data/sales.csv | cut -d',' -f3-5

Cette commande trouve d'abord toutes les lignes contenant "Laptop", puis extrait les champs 3 - 5 (Quantité, Prix et Total). Vous devriez voir :

5,1200,6000

Combinaison de cut avec sort

Vous pouvez utiliser sort pour organiser les données en fonction d'un champ spécifique :

cut -d',' -f2,4 data/sales.csv | sort -t',' -k2nr

Cette commande extrait le Produit (champ 2) et le Prix (champ 4), puis les trie en fonction du Prix dans l'ordre numérique inverse. L'option -t',' spécifie le délimiteur pour sort, -k2 indique le tri par le deuxième champ, n signifie tri numérique et r pour l'ordre inverse.

Vous devriez voir :

Product,Price
Laptop,1200
Monitor,200
Headphones,80
Keyboard,50
Mouse,25

Combinaison de cut avec sed

La commande sed est un éditeur de flux qui peut effectuer des transformations de texte de base. Voici un exemple de combinaison de cut avec sed :

cut -d',' -f1,2,5 data/sales.csv | sed 's/,/ - /g'

Cela extrait les champs Date, Produit et Total, puis remplace toutes les virgules par " - ". Vous devriez voir :

Date - Product - Total
2023-01-15 - Laptop - 6000
2023-01-16 - Mouse - 500
2023-01-17 - Keyboard - 750
2023-01-18 - Monitor - 1600
2023-01-19 - Headphones - 960

Combinaison de cut avec awk

La commande awk est un outil puissant de traitement de texte. Voici comment la combiner avec cut :

cut -d',' -f2-4 data/sales.csv | awk -F',' 'NR > 1 {print $1 " costs $" $3 " per unit"}'

Cela extrait les champs 2 - 4 (Produit, Quantité et Prix), puis utilise awk pour formater un message. La condition NR > 1 ignore la ligne d'en-tête, et l'instruction d'impression formate la sortie.

Vous devriez voir :

Laptop costs $1200 per unit
Mouse costs $25 per unit
Keyboard costs $50 per unit
Monitor costs $200 per unit
Headphones costs $80 per unit

Traitement de plusieurs fichiers

Vous pouvez également utiliser cut avec plusieurs fichiers. Créons un autre fichier :

echo "Category,Product,Stock" > data/inventory.csv
echo "Electronics,Laptop,15" >> data/inventory.csv
echo "Accessories,Mouse,50" >> data/inventory.csv
echo "Accessories,Keyboard,30" >> data/inventory.csv
echo "Electronics,Monitor,20" >> data/inventory.csv
echo "Accessories,Headphones,25" >> data/inventory.csv

Maintenant, extrayons le champ Produit des deux fichiers :

cut -d',' -f2 data/sales.csv data/inventory.csv

Vous devriez voir :

Product
Laptop
Mouse
Keyboard
Monitor
Headphones
Product
Laptop
Mouse
Keyboard
Monitor
Headphones

La commande cut traite tous les fichiers et affiche tous les résultats séquentiellement. Notez que les deux lignes d'en-tête sont incluses.

En combinant cut avec d'autres outils de traitement de texte, vous pouvez effectuer des tâches sophistiquées de manipulation de données de manière efficace sous Linux.

Applications pratiques de la commande cut

Dans cette étape, vous allez explorer quelques applications pratiques de la commande cut que vous pourriez rencontrer dans des scénarios réels.

Analyse de fichiers de logs

Les fichiers de logs sont un cas d'utilisation courant pour les outils de traitement de texte. Créons un simple fichier de log d'accès au style Apache :

cd ~/project
cat > data/access.log << EOF
192.168.1.100 - - [15/Feb/2023:10:12:01 -0500] "GET /index.html HTTP/1.1" 200 2048
192.168.1.102 - - [15/Feb/2023:10:13:25 -0500] "GET /images/logo.png HTTP/1.1" 200 4096
192.168.1.103 - - [15/Feb/2023:10:14:10 -0500] "POST /login.php HTTP/1.1" 302 1024
192.168.1.100 - - [15/Feb/2023:10:15:30 -0500] "GET /dashboard.html HTTP/1.1" 200 3072
192.168.1.104 - - [15/Feb/2023:10:16:22 -0500] "GET /css/style.css HTTP/1.1" 404 512
192.168.1.105 - - [15/Feb/2023:10:17:40 -0500] "GET /index.html HTTP/1.1" 200 2048
EOF

Extrayons les adresses IP (premier champ) du fichier de log :

cut -d' ' -f1 data/access.log

Vous devriez voir :

192.168.1.100
192.168.1.102
192.168.1.103
192.168.1.100
192.168.1.104
192.168.1.105

Maintenant, extrayons les codes de statut HTTP (9ème champ) :

cut -d' ' -f9 data/access.log

Vous devriez voir :

200
200
302
200
404
200

Traitement de fichiers de configuration

Un autre cas d'utilisation courant est le traitement de fichiers de configuration. Créons un simple fichier de configuration :

cat > data/config.ini << EOF
[Database]
host=localhost
port=3306
user=dbuser
password=dbpass

[Server]
host=192.168.1.10
port=8080
maxConnections=100

[Logging]
level=INFO
file=/var/log/app.log
EOF

Pour extraire tous les noms de paramètres (la partie avant le signe égal) :

grep -v "^\[" data/config.ini | cut -d'=' -f1

Cette commande utilise grep -v "^\[" pour exclure les en-têtes de section (les lignes commençant par [), puis utilise cut pour extraire la partie avant =. Vous devriez voir :

host
port
user
password
host
port
maxConnections
level
file

Extraction de données à partir de fichiers CSV pour la génération de rapports

Créons un fichier CSV plus complexe représentant les notes des étudiants :

cat > data/grades.csv << EOF
StudentID,Name,Math,Science,English,History,Average
S001,John Smith,85,92,78,88,85.75
S002,Mary Johnson,90,88,92,85,88.75
S003,Robert Davis,78,80,85,92,83.75
S004,Jennifer Lee,95,93,90,87,91.25
S005,Michael Brown,82,85,88,90,86.25
EOF

Pour générer un simple rapport montrant les noms des étudiants et leurs notes moyennes :

tail -n +2 data/grades.csv | cut -d',' -f2,6

La commande tail -n +2 saute la ligne d'en-tête, et cut extrait les champs Nom et Moyenne. Vous devriez voir :

John Smith,85.75
Mary Johnson,88.75
Robert Davis,83.75
Jennifer Lee,91.25
Michael Brown,86.25

Pour trouver les étudiants ayant une note moyenne supérieure à 85 :

tail -n +2 data/grades.csv | cut -d',' -f2,6 | awk -F',' '$2 > 85 {print $1 " has an average of " $2}'

Vous devriez voir :

John Smith has an average of 85.75
Mary Johnson has an average of 88.75
Jennifer Lee has an average of 91.25
Michael Brown has an average of 86.25

Extraction de colonnes spécifiques à partir de la sortie de commandes

Vous pouvez utiliser cut pour extraire des colonnes spécifiques à partir de la sortie de commandes. Par exemple, pour lister uniquement les noms et les tailles des fichiers dans le répertoire actuel :

ls -l ~/project/data | tail -n +2 | cut -d' ' -f5,9

Cette commande liste les fichiers en format détaillé, saute la ligne d'en-tête et extrait la taille (champ 5) et le nom (champ 9). La sortie exacte dépendra de vos fichiers, mais elle ressemblera à ceci :

237 access.log
99 config.ini
203 employees.txt
179 grades.csv
110 inventory.csv
150 sales.csv
264 users.txt

Ces exemples démontrent comment la commande cut peut être utilisée dans divers scénarios pratiques pour extraire et traiter des parties spécifiques de données textuelles.

Résumé

Dans ce laboratoire, vous avez appris à utiliser la commande Linux cut pour extraire des parties spécifiques de texte à partir de fichiers. Vous avez abordé :

  • L'utilisation de base de cut avec des délimiteurs pour extraire des champs à partir de fichiers texte structurés
  • Comment extraire du texte en fonction des positions des caractères pour les formats de données à largeur fixe
  • La combinaison de cut avec d'autres outils de traitement de texte tels que grep, sort, sed et awk pour des manipulations de données plus complexes
  • Les applications pratiques de la commande cut pour des scénarios courants tels que l'analyse de logs, le traitement de fichiers de configuration et la génération de rapports de données

La commande cut est un outil puissant dans la boîte à outils de traitement de texte Linux. Bien qu'elle puisse sembler simple au premier abord, sa capacité à extraire des parties spécifiques de texte la rend inestimable pour de nombreuses tâches de traitement de données. Lorsqu'elle est combinée avec d'autres commandes Linux via des pipes, elle fait partie d'un système de traitement de texte flexible et puissant.

Voici quelques points clés à retenir :

  • Utilisez -d pour spécifier un délimiteur et -f pour sélectionner des champs lorsque vous travaillez avec du texte structuré
  • Utilisez -c pour extraire des caractères spécifiques lorsque vous travaillez avec des données à largeur fixe
  • Combinez cut avec d'autres commandes en utilisant des pipes pour un traitement plus sophistiqué
  • La commande cut est la plus efficace lorsque les données suivent un format cohérent

Avec ces compétences, vous pouvez maintenant extraire et traiter efficacement des données textuelles dans des environnements Linux, ce qui est essentiel pour diverses tâches administratives et de traitement de données.