Vous cherchez à effectuer une jointure interne sur deux fichiers texte différents. Fondamentalement, je recherche l’équivalent de jointure interne du programme de jointure GNU. Est-ce qu’une telle chose existe? Sinon, une solution awk
ou sed
serait très utile, mais mon premier choix serait une commande Linux.
Voici un exemple de ce que je cherche à faire
dossier 1:
0|Alien Registration Card LUA|Checklist Update 1|Alien Registration Card LUA|Document App Plan 2|Alien Registration Card LUA|SA Application Nbr 3|Alien Registration Card LUA|tmp_preapp-DOB 0|App - CSCE Certificate LUA|Admit Type 1|App - CSCE Certificate LUA|Alias 1 2|App - CSCE Certificate LUA|Alias 2 3|App - CSCE Certificate LUA|Alias 3 4|App - CSCE Certificate LUA|Alias 4
dossier 2:
Alien Registration Card LUA
Résultats:
0|Alien Registration Card LUA|Checklist Update 1|Alien Registration Card LUA|Document App Plan 2|Alien Registration Card LUA|SA Application Nbr 3|Alien Registration Card LUA|tmp_preapp-DOB
Le fichier2 ne devrait-il pas contenir LUA
à la fin?
Si oui, vous pouvez toujours utiliser join
:
join -t'|' -12 <(sort -t'|' -k2 file1) file2
Vous pouvez modifier ce script:
cat file2 | while read line; do grep $line file1 # or whatever you want to do with the $line variable done
while boucle lit fichier2 ligne par ligne et donne cette ligne à la commande grep qui écrit cette ligne dans fichier1. Il y a des sorties supplémentaires qui peuvent être supprimées avec les options grep.
Voici une option awk, vous pouvez donc éviter la dépendance bash (pour la portabilité):
$ awk -F'|' 'NR==FNR{check[$0];next} $2 in check' file2 file1
Comment cela marche-t-il?
-F'|'
– définit le séparateur de champ 'NR==FNR{check[$0];next}
– si le nombre total d’enregistrements correspond au numéro d’enregistrement du fichier (c’est-à-dire que nous lisons le premier fichier fourni), nous remplissons un tableau et continuons. $2 in check
– Si le deuxième champ a été mentionné dans le tableau que nous avons créé, imprimez la ligne (qui est l’action par défaut si aucune action n’est fournie). file2 file1
– les fichiers. L’ordre est important en raison de la construction NR==FNR
. On dirait que vous avez juste besoin
grep -F -f file2 file1
Vous pouvez utiliser la commande coller pour combiner le fichier:
paste [option] source files [>destination file]
pour votre exemple, il serait
paste file1.txt file2.txt >result.txt