Commande join de Linux : Jointure de fichiers

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 (lab), vous apprendrez à utiliser la commande join sous Linux pour fusionner des données provenant de plusieurs fichiers. Nous allons simuler un scénario où vous travaillez dans le service des ressources humaines (HR) d'une entreprise et que vous devez combiner les informations sur les employés provenant de différentes bases de données. Cet exercice pratique montrera la puissance et la flexibilité de la commande join pour les tâches de traitement de données.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/join("File Joining") subgraph Lab Skills linux/cd -.-> lab-219193{{"Commande join de Linux : Jointure de fichiers"}} linux/join -.-> lab-219193{{"Commande join de Linux : Jointure de fichiers"}} end

Comprendre les fichiers de données

Commençons par examiner le contenu de nos fichiers de données sur les employés. Nous avons deux fichiers : employees.txt et salaries.txt.

Tout d'abord, accédez au répertoire du projet :

cd /home/labex/project

Cette commande change votre répertoire de travail actuel pour /home/labex/project. Toutes les opérations suivantes seront effectuées dans ce répertoire.

Maintenant, affichons le contenu de employees.txt :

cat employees.txt

La commande cat affiche le contenu du fichier. Vous devriez voir une sortie similaire à ceci :

1001 John Engineering
1002 Sarah Marketing
1003 Mike Sales
1004 Emily HR
1005 David Finance

Chaque ligne représente un employé avec son identifiant (ID), son nom et son service.

Ensuite, regardons le fichier salaries.txt :

cat salaries.txt

La sortie devrait être similaire à :

1001 75000
1002 65000
1003 70000
1004 60000
1005 80000

Ce fichier contient les identifiants (ID) des employés et leurs salaires correspondants.

Ces fichiers représentent des bases de données distinctes que nous allons fusionner à l'aide de la commande join.

Opération de jointure de base

Maintenant que nous comprenons nos données, utilisons la commande join pour fusionner les informations des deux fichiers en fonction de l'identifiant (ID) de l'employé.

Exécutez la commande suivante :

join employees.txt salaries.txt

Vous devriez voir une sortie similaire à ceci :

1001 John Engineering 75000
1002 Sarah Marketing 65000
1003 Mike Sales 70000
1004 Emily HR 60000
1005 David Finance 80000

Analysons ce qui s'est passé :

  1. La commande join a examiné le premier champ (identifiant de l'employé) dans les deux fichiers.
  2. Lorsqu'elle a trouvé des identifiants correspondants, elle a combiné les lignes des deux fichiers.
  3. La sortie affiche l'identifiant de l'employé, suivi de tous les champs de employees.txt, puis de tous les champs de salaries.txt (à l'exception de l'identifiant, qui serait redondant).

Cela nous donne une vue complète des informations de chaque employé sur une seule ligne. La commande join est particulièrement utile lorsque vous avez des données réparties sur plusieurs fichiers mais que vous souhaitez les visualiser ou les analyser ensemble.

Personnaliser la sortie de la jointure

Parfois, nous pouvons souhaiter modifier l'ordre des champs dans notre sortie ou n'inclure que des champs spécifiques. Nous pouvons le faire en spécifiant les numéros de champ après la commande de jointure.

Essayez cette commande :

join -o 1.2,1.3,2.2,1.1 employees.txt salaries.txt

Vous devriez voir :

John Engineering 75000 1001
Sarah Marketing 65000 1002
Mike Sales 70000 1003
Emily HR 60000 1004
David Finance 80000 1005

Analysons l'option -o :

  • -o signifie "format de sortie" (output format)
  • 1.2 désigne le deuxième champ du premier fichier (nom)
  • 1.3 désigne le troisième champ du premier fichier (service)
  • 2.2 désigne le deuxième champ du deuxième fichier (salaire)
  • 1.1 désigne le premier champ du premier fichier (identifiant de l'employé)

Cela nous permet de personnaliser l'ordre des informations dans notre sortie. C'est particulièrement utile lorsque vous devez réorganiser les données pour un format de rapport spécifique ou lorsque vous n'avez besoin que de certains champs de chaque fichier.

Gérer les enregistrements non appariés

Dans les scénarios du monde réel, vous pourriez avoir des enregistrements dans un fichier qui n'ont pas de correspondance dans l'autre fichier. Simulons cela en ajoutant un nouvel employé qui n'a pas encore de salaire affecté.

Ajoutez cet employé à employees.txt :

echo "1006 Alex IT" >> employees.txt

L'opérateur >> ajoute la nouvelle ligne à la fin du fichier sans écraser le contenu existant.

Maintenant, si nous exécutons notre commande de jointure de base :

join employees.txt salaries.txt

Vous remarquerez qu'Alex n'apparaît pas dans la sortie car il n'y a pas d'enregistrement correspondant dans salaries.txt.

Pour inclure les enregistrements non appariés, nous pouvons utiliser l'option -a :

join -a 1 employees.txt salaries.txt

Maintenant, vous devriez voir Alex dans la sortie :

1001 John Engineering 75000
1002 Sarah Marketing 65000
1003 Mike Sales 70000
1004 Emily HR 60000
1005 David Finance 80000
1006 Alex IT

L'option -a 1 indique à join d'inclure les lignes non appariées du premier fichier (employees.txt). Cela est utile lorsque vous souhaitez voir tous les enregistrements d'un fichier, même s'ils n'ont pas de correspondance dans l'autre fichier.

Effectuer une jointure sur un autre champ

Jusqu'à présent, nous avons effectué des jointures sur nos fichiers en utilisant le premier champ (identifiant de l'employé). Mais que faire si nous voulons effectuer une jointure sur un autre champ? Cela peut être utile lorsque vos fichiers sont organisés différemment ou lorsque vous devez fusionner des données en fonction d'un attribut commun autre qu'un identifiant.

Créons un nouveau fichier appelé departments.txt avec des codes de service :

cat << EOF > departments.txt
Engineering ENG
Marketing MKT
Sales SLS
HR HRS
Finance FIN
IT ITS
EOF

Cette commande crée un nouveau fichier departments.txt avec les noms de service et leurs codes correspondants.

Maintenant, effectuons une jointure entre ce fichier et notre fichier employees.txt en fonction du nom du service :

join -1 3 -2 1 employees.txt departments.txt

Vous devriez voir :

Engineering 1001 John ENG
Marketing 1002 Sarah MKT
Sales 1003 Mike SLS
HR 1004 Emily HRS
Finance 1005 David FIN
IT 1006 Alex ITS

Analysons la commande :

  • -1 3 indique à join d'utiliser le troisième champ du premier fichier (employees.txt) comme champ de jointure
  • -2 1 indique à join d'utiliser le premier champ du deuxième fichier (departments.txt) comme champ de jointure

Cela nous permet d'effectuer des jointures entre des fichiers en fonction de n'importe quel champ commun, pas seulement le premier. C'est particulièrement utile lorsque vos fichiers ont des structures différentes mais partagent certaines informations communes.

Résumé

Dans ce laboratoire, vous avez appris à utiliser la commande join sous Linux pour fusionner des données provenant de plusieurs fichiers. Nous avons exploré plusieurs fonctionnalités clés de join :

  • Jointure de base de deux fichiers en fonction d'un champ commun
  • Personnalisation de l'ordre de sortie à l'aide de l'option -o
  • Inclusion des enregistrements non appariés avec l'option -a
  • Jointure sur des champs autres que la première colonne à l'aide des options -1 et -2

D'autres options de join non couvertes dans ce laboratoire incluent :

  • -t CHAR : Utilisez CHAR comme séparateur de champ d'entrée et de sortie
  • -i : Ignorez les différences de casse lors de la comparaison des champs
  • -e STRING : Remplacez les champs d'entrée manquants par STRING
  • -j FIELD : Équivalent à '-1 FIELD -2 FIELD'
  • -v FILE_NUMBER : Comme -a FILE_NUMBER, mais supprime les lignes de sortie jointes

La commande join est un outil puissant pour le traitement de données sous Linux, vous permettant de combiner efficacement des informations provenant de plusieurs sources. Lorsque vous continuerez à travailler avec des données dans votre environnement Linux, rappelez-vous que join peut être un atout précieux pour fusionner et analyser des informations provenant de différents fichiers.

Ressources