Bonjour !
Bon, je préviens, j'annonce un gros pavé pour expliquer mon problème ! Je vais essayer de détailler le plus possible les commandes que j'utilise !
J’ai un petit soucis avec le fait d’extraire des données de plusieurs fichiers .csv en bash :
J’ai deux fichiers csv, un pour le mois de novembre et un autre pour le mois de décembre. Les deux ont 15 colonnes, mais l’un est composé de 5200 lignes et l’autre de 5204 lignes. Les noms des colonnes sont les mêmes dans les deux fichiers et tout est classé de la même manière.
On me demande de comparer les résultats de la colonne “O” des deux fichiers et deux trouver le nom des volumes qui ont disparus et ceux qui sont apparus entre temps. Voilà où j’en suis :
Pour faire la différence entre les deux colonnes, j’extrait d’abord la colonne qui m’intéresse des deux fichiers :
Ainsi, j’ai deux fichiers csv avec les colonnes qui m’intéressent. Il me reste plus qu’à les soustraires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cut -d, -f15 fichierNovembre.csv > fichier1.csv cut -d, -f15 fichierDecembre.csv > fichier2.csv
J’obtiens bien un troisième .csv avec la différence des deux colonnes. Le problème, c’est que je perds l’en-tête avec le nom de la colonne. Il est remplacé par un 0. Donc je suis obligé de supprimer la ligne avec le 0 et d’ajouter l’en-tête manuellement avec la commande sed, ce n’est pas pratique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part awk {getline t<fichierNovembre.csv; print $0-t} fichierDecembre.sv > fichier3.csv
Ensuite, pour voir les volumes qui sont apparus entre temps et ceux qui ont disparus, je fais la même chose, j’extrais des fichiers la colonne avec le nom des volumes :
Puis je fais la différence entre les deux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cut -d, -f2 fichierNovembre.csv > fichier4.csv cut -d, -f2 fichierDecembre.csv > fichier5.csv
Code : Sélectionner tout - Visualiser dans une fenêtre à part diff -u fichier4.csv fichier5.csv > fichier6.csv
Dans ce .csv, les fichiers disparus sont représentés par les “-” et ceux qui sont apparus par des “+”. Il y a aussi des “@” qui sont apparus mais je ne sais pas à quoi ils servent. Je décide donc de faire deux fichiers, un qu’avec les “-” et un autre qu’avec les “+” tout en supprimant les “@” :
De ce fait, j’obtiens trois .csv :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 grep - fichier6.csv > fichier7.csv grep + fichier6.csv > fichier8.csv grep -v @ fichier7.csv > fichier9.csv grep -v @ fichier8.csv > fichier10.csv
Celui avec la différence entre les volumes > fichier3.csv
Celui avec les volumes qui ont disparus > fichier9.csv
Celui avec les volumes qui ont apparus > fichier10.csv
Mais je dois également ajouter deux fichiers en plus : un qu’on nommera fichier11.csv , celui avec la référence des volumes, histoire que je puisse savoir à quel volume appartient tel chiffre de la colonne “O” extrait dans le fichier3.csv, une fois face à face, et un autre avec le nom des volumes, qu’on nommera fichier12.csv ( je ne sais pas si c’est très clair… ). Donc au total, j’ai 5 fichier.csv
On est d’accord que ce n’est pas pratique, mais ce sont les premières commandes qui me sont venues. J’ai tout “ automatisé ” en insérant ces commandes dans un script. J’ai juste à donner les deux fichiers à traiter en paramètres et tout ce fait automatiquement.
Le problème maintenant, c’est que je dois rendre le tout dans un seul fichier csv, pour celà, j’utilise la commande diff -y :
Je fusionne le fichier avec la référence et le nom des volumes entre eux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part diff -y fichier11.csv fichier12.csv > fichier13.csv
Le problème avec cette commande c’est que la colonne qui est dans le fichier11.csv et celle qui est dans le fichier13.csv sont séparés par 6 colonnes. Elles ne sont pas côte à côte. Et en plus de ça, il y a une colonne qu’avec des pipes juste avant la colonne 6. Mais admettons que ce n’est pas trop grave.
Il faut ensuite que je fusionne ce fichier contenant la référence et le nom des colonnes avec la colonnes que j’ai extrais pour faire la différence entre les volumes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part diff -y fichier13.csv fichier3.csv > fichier14.csv
Je devrais avoir 3 colonnes dans mon fichier14.csv, j’en ai que deux car la colonne du fichier3.csv a remplacé la deuxième colonne du fichier14.csv au lieu de se mettre à la suite…
Auriez-vous une solution pour fusionner mes fichier csv en un seul fichier ?
Merci d’avance !
Partager