J’ai deux fichiers avec des colonnes sortingées par la valeur de la première colonne, et je veux les fusionner uniquement si la valeur du second existe dans le premier.
Le premier fichier est comme ça
man01 xxx yyy zzz man02 xxx yyy zzz man03 xxx yyy zzz man04 xxx yyy zzz
Le deuxième fichier
man01 sss man08 sss
Et la sortie souhaitée est
man01 xxx yyy zzz sss man02 xxx yyy zzz man03 xxx yyy zzz man04 xxx yyy zzz
J’ai essayé de rejoindre mais nécessite des valeurs de second fichier dans le premier: /
Join peut le faire, avez-vous envisagé l’option -a
? Il produira une ligne pour chaque ligne de fichier non compatible dans a.txt et b.txt.
join -a1 a.txt b.txt man01 xxx yyy zzz sss man02 xxx yyy zzz man03 xxx yyy zzz man04 xxx yyy zzz
Eh bien, ce n’est pas une beauté de l’utilisation élégante de la ligne de commande, mais qu’en est-il?
perl -we 'open F1, "$_) : ()} ; while () { chomp; print; if (/(\S+)/ && exists $f2{$1}) { $f2{$1} =~ /\S+\s+(.*)/ and print " $1"; } print "\n"; }'
Mise à jour: Pendant que je travaillais sur ce qui précède, il semble que @bunting et @ c00kiemon5ter aient trouvé une réponse beaucoup plus élégante. Excellent!