Introduction

Introduction

La commande de jointure est encore un autre exemple d'utilité de traitement de texte sous GNU / Linux. La commande join combine deux fichiers en fonction des lignes de contenu correspondantes trouvées dans chaque fichier. L'utilisation de la commande join est assez simple et si elle est utilisée actuellement et dans la bonne situation, elle peut économiser beaucoup de temps et d'efforts. Cet article nécessite une expérience de ligne de commande très basique.

Options fréquemment utilisées

  • -1 champ
    Rejoindre le champ spécifié trouvé dans le fichier 1
  • -2 champs
    Rejoindre le champ spécifié trouvé dans le fichier 2
  • -t
    Utiliser le char comme séparateur d'entrée et de sortie

Bases

L'utilisation de base de la commande join est l'utilisation sans aucune option. Tout ce qui est nécessaire, c'est spécifier 2 fichiers comme arguments. Disons que nous avons deux fichiers un.txt et b.txt avec un contenu suivant:

$ Cat A.SMS 1 a 2 b 3 c $ chat b.SMS 1 John 2 Linda 3 Rares 

Ici, nous pouvons voir que First Field est un candidat parfait pour effectuer une opération de jointure sur. Par défaut, la commande JOIN effectuera l'opération de jointure sur un premier champ où le séparateur de champ est un caractère ou un onglet à un seul espace. Par conséquent, en exécutant une commande Linux suivante, nos deux fichiers sont joints en fonction du champ 1:

$ rejoignez un.txt b.SMS 1 A John 2 B Linda 3 C Rares 

Choisir le champ

Dans notre exemple précédent, vous pouvez voir une fonction par défaut d'une commande jointure. Dans cette section, nous verrons comment nous pouvons spécifier différents champs sur lesquels la commande de jointure devrait effectuer une opération d'adhésion. Permet de considérer un suivant un.txt et b.Fichiers TXT:

$ Cat A.SMS John A 1 Linda B 2 Rares C 3 $ chat b.SMS 1 a 2 b 3 c 

Comme nous pouvons le voir, dans ce cas, nous, le premier champ de jointure par défaut, ne correspond pas plus. Par conséquent, l'exécution d'une commande de jointure sur ces deux fichiers ne produira aucune sortie. Cependant, nous pouvons également voir que le deuxième champ du premier fichier correspond au deuxième champ dans le deuxième fichier. En conséquence, nous pouvons modifier le comportement par défaut de la commande join et joindre les deux fichiers en fonction du deuxième champ dans chaque fichier:

$ join -1 2 -2 2 a.txt b.SMS A John 1 1 B Linda 2 2 C Rares 3 3 

où -1 est un premier fichier et 2 est un deuxième champ et -2 est un deuxième fichier et 2 est une deuxième colonne. Dans ce cas, juste parce que les deux champs de correspondance sont deuxième que nous pouvons utiliser -J comme raccourci.

$ join -j 2 a.txt b.SMS A John 1 1 B Linda 2 2 C Rares 3 3 

Comme vous l'avez déjà remarqué, un troisième champ et un premier champ dans les deux fichiers peuvent également être utilisés pour une opération de jointure.

$ join -1 2 -2 2 a.txt b.SMS A John 1 1 B Linda 2 2 C Rares 3 3 $ join -1 3 -2 1 a.txt b.SMS 1 John A A 2 Linda B B 3 Rares C C 

Il est important de noter des derniers à des exemples qui joient à la commande imprimera toujours le champ correspondant en premier.

Choisir le délimiteur de champ

Eh bien, tous les fichiers ne sont pas bien formatés pour une opération de commande de jointure. Comme mentionné précédemment, le délimiteur de champ par défaut est l'espace. Mais que se passe-t-il si nous avons «» («virgule) ou même onglet en tant que délimiteur? Considérons un fichier suivant:

$ Cat A.SMS John, A, 1 Linda, B, 2 Rares, C, 3 $ chat b.SMS 1, a 2, b 3, c 

Dans ce cas, la seule différence par rapport aux exemples précédents est que le séparateur de champ est «,». Pour dire la commande jointure quel séparateur de champ à utiliser, nous pouvons profiter de l'option -t Otewise La syntaxe est la même:

$ join -t, -1 3 -2 1 a.txt b.SMS 1, John, A, A 2, Linda, B, B 3, Rares, C, C 

Plusieurs espaces

Si vos fichiers ont plusieurs espaces en tant que délimiteur de champ, l'option la plus sûre consiste à les convertir en un seul délimiteur d'espace. Par exemple, rejoindre ces fichiers peut être assez difficile:

$ Cat A.SMS John A 1 Linda B 2 Rares C 3 $ chat b.SMS 1 a 2 b 3 c 

Par conséquent, si la situation vous le permet, vous pouvez la convertir en un seul fichier délimité d'espace à l'aide de la commande SED:

$ sed -i 's / \ s \ + / / g' a.SMS $ sed -i 's / \ s \ + / / g' b.SMS $ Cat A.txt b.SMS John A 1 Linda B 2 Rares C 3 1 A 2 B 3 C 

Onglet Un délimiteur de champ

Tab Delimiter est également accepté par la commande join en par défaut. Par conséquent, l'exemple suivant effectuera une opération de jointure valide:

$ Cat A.txt b.SMS John A 1 Linda B 2 Rares C 3 1 A 2 B 3 C $ join -1 3 -2 1 a.txt b.SMS 1 John A A 2 Linda B B 3 Rares C C 

Ignorer le cas

Si votre champ de correspondance est dans un ordre parfait, mais que les champs des deux fichiers ont des différences supérieures et inférieures, la jointure n'effectuera pas une opération de jointure valide et ignorera les lignes inégalées à moins que -i (ignorer le cas) soit utilisé. Remarquez le cas inférieur suivant dans l'exemple suivant:

$ Cat A.txt b.SMS John A 1 Linda B 2 Rares C 3 1 A 2 B 3 C $ join -1 2 -2 2 a.txt b.SMS A John 1 1 C rares 3 3 $ join -i -1 2 -2 2 a.txt b.SMS A John 1 1 B Linda 2 2 C Rares 3 3 

Format de jointure par défaut

Dans l'exemple suivant, nous verrons comment nous pouvons remplacer un comportement de format de commande de jointure par défaut avec l'option -O. Envisagez une sortie de jointure de fichiers A.txt et b.SMS:

$ Cat A.txt b.SMS John A 1 Linda B 2 Rares C 3 1 A 2 B 3 C $ join -1 2 -2 2 a.txt b.SMS A John 1 1 B Linda 2 2 C Rares 3 3 

Le champ d'adhésion est imprimé en premier. Et si nous ne voulons pas du tout imprimer un champ de jointure ou si nous voulons imprimer le champ joint dans un ordre différent. Dans ce cas, l'option de format -o devient très pratique. Dans cet exemple, nous imprimerons uniquement les champs correspondants:

  • Premier champ dans le premier fichier: 1.1
  • Premier champ dans le deuxième fichier: 2.1
$ join -o 1.1 2.1 -1 2 -2 2 A.txt b.SMS John 1 Linda 2 Rares 3 

Lignes non-pairables

Par défaut, seules les lignes applicables sont imprimées par commande join. -Une option demande à la commande de joindre à inclure également les lignes inégalées. Dans l'exemple suivant, nous imprimerons toutes les lignes inégalées dans le fichier 1.

$ Cat A.txt b.SMS John A 1 Linda B 2 Rares C 3 Lubos D 4 1 A 2 B 3 C 5 E $ join -a 1 -o 1.1 2.1 -1 2 -2 2 A.txt b.SMS John 1 Linda 2 Rares 3 Lubos 

ou nous Imprimez toutes les lignes non pairables des deux fichiers par:

$ join -a 1 -a 2 -o 1.1 2.1 -1 2 -2 2 A.txt b.SMS John 1 Linda 2 Rares 3 Lubos 5 

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Masterring Bash Script Loops
  • Boucles imbriquées dans les scripts bash
  • Gestion de la saisie des utilisateurs dans les scripts bash
  • Commandes Linux de base
  • Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Fichiers de configuration Linux: 30 premiers
  • Comment monter l'image ISO sur Linux