Parfois, vous souhaiterez peut-être combiner deux fichiers de manière à ce que la sortie ait encore plus de sens. Par exemple, il pourrait y avoir un fichier contenant le nom des continents et un autre fichier contenant les noms des pays situés sur ces continents, et l'exigence est de combiner les deux fichiers de manière à ce qu'un continent et le pays correspondant apparaissent sur la même ligne.
Ce n'est qu'un exemple - il pourrait y avoir des centaines de cas d'utilisation de ce type. Si vous êtes sous Linux et que vous recherchez un outil qui peut vous aider dans ces situations, vous voudrez peut-être consulter rejoindre , qui est un utilitaire de ligne de commande. Dans ce didacticiel, nous discuterons de cette commande à l'aide d'exemples faciles à comprendre.
Veuillez noter que tous les exemples mentionnés dans cet article ont été testés sur Ubuntu 16.04 et que la version de la commande join que nous avons utilisée est la 8.25.
Commande de jointure Linux
La commande join vous permet de combiner des lignes de deux fichiers sur un champ commun.
join [OPTION]... FILE1 FILE2
Voici ce que dit la page de manuel à propos de cet outil :
For each pair of input lines with identical join fields, write a line to standard output. The default
join field is the first, delimited by blanks. When FILE1 or FILE2 (not both) is -, read standard input.
Les exemples suivants devraient vous donner une bonne idée du fonctionnement de la commande join.
1. Comment combiner des lignes de fichiers à l'aide de la commande join ?
Comprenons l'utilisation de base de la commande join. Supposons qu'il existe deux fichiers (fichier1 et fichier2) contenant les lignes suivantes :
1. Asia:
2. Africa:
3. Europe:
4. North America:
et
1. India
2. Nigeria
3. The Netherlands
4. The US
Maintenant, vous pouvez combiner ces deux fichiers de la manière suivante :
join file1 file2
Voici le résultat de la commande ci-dessus dans notre cas :
2. Comment faire pour joindre des lignes non appairables ?
Par défaut, la commande join imprime uniquement les lignes appariables. Par exemple, même si fichier1 contient un champ supplémentaire (numéro de ligne 5) :
1. Asia:
2. Africa:
3. Europe:
4. North America:
5. South America:
joindre fichier1 et fichier2 ne produira aucune sortie différente :
C'est parce que les lignes non appariables sont laissées de côté dans la sortie. Cependant, si vous le souhaitez, vous pouvez toujours les avoir dans la sortie en utilisant le -a option de ligne de commande. Cette option nécessite que vous passiez un numéro de fichier afin que l'outil sache de quel fichier vous parlez.
Par exemple, dans notre cas, la commande serait :
join file1 file2 -a 1
Vous pouvez donc voir que la ligne non appariée du fichier numéro 1 (fichier1 dans notre cas) était également affichée dans la sortie.
Notez que si vous souhaitez simplement imprimer des lignes non appariées (c'est-à-dire supprimer les lignes appariées dans la sortie), vous pouvez le faire en utilisant le -v option de ligne de commande. Cette option fonctionne exactement comme -a.
Voici un exemple de l'option -v :
3. Comment fournir des champs de jointure personnalisés ?
Comme nous le savons déjà, la jointure combine des lignes de fichiers sur un champ commun, qui est le premier champ par défaut. Cependant, si vous le souhaitez, vous pouvez spécifier un champ différent pour chaque fichier. Par exemple, considérez le contenu suivant dans fichier1 et fichier2, respectivement.
* 1. Asia:
& 2. Africa:
@ 3. Europe:
# 4. North America:
# 1. India
@ 2. Nigeria
& 3. The Netherlands
* 4. The US
Maintenant, si vous voulez que le deuxième champ de chaque ligne soit le champ commun pour la jointure, vous pouvez le dire à l'outil en utilisant le -1 et -2 options de ligne de commande. Alors que le premier représente le premier fichier, le second fait référence au deuxième fichier. Ces options nécessitent un argument numérique faisant référence au champ de jointure du fichier correspondant.
Par exemple, dans notre cas, la commande sera :
join -1 2 -2 2 file1 file2
Et voici le résultat de cette commande :
Notez que dans le cas où la position du champ commun est la même dans les deux fichiers (comme dans l'exemple dont nous venons de discuter, où c'est 2), vous pouvez remplacer la partie - 1 [champ] -2 [champ] dans la commande avec -j [champ] . Donc dans notre cas, la commande deviendrait :
joindre -j2 fichier1 fichier2
4. Comment rendre l'opération de jointure insensible à la casse ?
Par défaut, l'opération de commande de jointure est sensible à la casse. Par exemple, considérez les fichiers suivants :
fichier1
A. Asia:
B. Africa:
C. Europe:
D. North America:
fichier2
a. India
b. Nigeria
c. The Netherlands
d. The US
Maintenant, si vous essayez de joindre ces deux fichiers, en utilisant le champ commun par défaut (le premier), rien ne se passera. C'est parce que le cas des éléments de champ dans les deux fichiers est différent. Pour que la jointure ignore ce problème de casse, utilisez le -i option de ligne de commande.
Voici la commande pour notre cas :
join -i file1 file2
Et la capture d'écran suivante montre la commande en action :
5. Comment faire en sorte que la jointure ne vérifie pas les entrées triées ?
Par défaut, la commande join vérifie si l'entrée fournie est triée ou non et signale si ce n'est pas le cas. Par exemple, considérez la sortie suivante lorsque les informations du fichier1 n'ont pas été triées :
Maintenant, au cas où vous voudriez que cette erreur/avertissement disparaisse, vous pouvez le faire en utilisant le --nocheck-order option. Voici la même commande, mais avec cette option activée :
Vous pouvez donc voir que la commande de jointure n'a pas vérifié les entrées triées cette fois.
Conclusion
Join n'est peut-être pas un outil très simple à comprendre, mais une fois que vous vous y serez habitué, cela pourrait vous faire gagner un temps considérable dans certaines situations. Nous avons couvert la plupart des options de ligne de commande ici. Essayez-les et, une fois terminé, parcourez la page de manuel de la commande pour le reste.