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
-24
faire une jointure entre la colonne 1 dufile1.csv
et la colonne 4 dufile2.csv
-t,
définie le séparateur dans le fichier ici c’est uncsv
Comma 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.