Introduction
Un problème que j’ai eu au travail.
Soit les deux fichiers suivants csv suivant
1 2 3 4 5 | |
1 2 3 4 | |
Je souhaite faire un merge de ces deux csv. Comment faire ?
En solution 1 j’ai pensé.
- Créer une table temporaire
- dumper les deux fichiers
- faire un jointure sql
- faire un export
Et puis je me suis souvenu de la commande join
Voici la commande que j’ai utilisé
1
| |
Voici le détail de la commande
-11-24faire une jointure entre la colonne 1 dufile1.csvet la colonne 4 dufile2.csv-t,définie le séparateur dans le fichier ici c’est uncsvComma Separed Value, donc le séparateur est,
Voici le résultat
1 2 3 4 | |
C’est une jointure classique ID_5 n’apparait pas dans le résultats pas plus que Adresse4
Faire un select
On précise les colonnes que l’on souhaite avec l’option -o
1
| |
-o1.2,2.1 la colonne 2 du file1.csv et la colonne 1 du file2.csv
1 2 3 4 | |
Left-join et Right Join
C’est possible à émuler avec l’option -a et -e -a affiche le fichier 1 ou 2 même s’il n’y a pas de jointure et et -e la valeur par défaut à l’affichage
deux possibilités
1 2 | |
1 2 3 4 5 | |
1 2 | |
1 2 3 4 5 | |
Conclusion
Si un jour vous avez besoin de merger deux fichiers sans forcement sortir un script complexe, penser à linux.
Pour le csv et PHP, c’est inclus dans l’instruction fgetcsv mais ce n’est pas la joie, la librairie suivante thephpleague/csv rend cela nettement plus agréable.