Correspondance entre 2 fichiers [ksh] - Shell/Batch - Programmation
Marsh Posté le 25-03-2009 à 23:32:37
ReplyMarsh Posté le 26-03-2009 à 12:51:17
Elmoricq a écrit : Me semble que "join" permet de faire ça. À vérifier avec "man join". |
J'ai donc essayé cette commande :
Format du fichier depart.csv :
nom_projet;nom_job;lien_sort;id_col_sort;nom_col_sort
Format du fichier sortie.csv :
nom_projet;nom_job;nom_lien;id_table
# Trie les fichiers
sort -t ';' -k 2,3 sortie.csv > sortsortie.csv
sort -t ';' -k 2,3 depart.csv > sortdepart.csv
join -1 2,3 -2 2,3 -t ';' -o "1.1 1.2 1.3 1.4 1.5 2.4" sortdepart.csv sortsortie.csv > arrsortie.csv
Pour essayer d'avoir en sortie le meme fichier que depart.csv mais avec l'id correspondant pour chaque nom_job et nom_lien
Après la commande j'ai vérifié et j'obtiens un fichier arrsortie.csv de 101891 lignes alors que depart.csv n'en contient que 23411
Quelqu'un sait pourquoi?
Marsh Posté le 26-03-2009 à 13:23:35
Les lignes supplémentaires ne seraient-elles pas les lignes sans correspondance entre les deux fichiers ?
Marsh Posté le 26-03-2009 à 19:33:10
Non, chaque ligne du 1er fichier a une correspondance dans le 2eme, par contre j'ai fais "join -1 2,3 -2 2,3" pour joindre par rapport aux champs 2 et 3 mais je ne sais pas si c'est possible ça vient surement de la parce que j'ai testé en concatenant ces deux champs, en rajoutant cet colonne et en faisant le join sur cette colonne ça fonctionne.
Si quelqu'un a une autre solution plus "propre" ça serait cool!
Marsh Posté le 07-04-2009 à 10:48:12
stagebi a écrit : ... Je peux faire ça avec awk ? Comment ? |
Oui.
En montant ton fichier des tables dans un tableau.
Par exemple :
<fichier_table>
idtab1;lien1;job1
idtab2;lien2;job2
<fichier_cols>
job1;lien1;col1;colonne n°1
job1;lien1;col2;colonne n°2
job1;lien1;col3;colonne n°3
job2;lien2;col1;colonne n°1
job3;lien3;col1;test vide
Commande awk :
Code :
|
Résultat :
<fichier.out>
job1;lien1;col1;idtab1;colonne n°1
job1;lien1;col2;idtab1;colonne n°2
job1;lien1;col3;idtab1;colonne n°3
job2;lien2;col1;idtab2;colonne n°1
job3;lien3;col1;;test vide
Dans cet exemple, si on ne trouve pas de référence, on met NULL dans la colonne en sortie id_table
Marsh Posté le 25-03-2009 à 23:27:38
Bonjour,
J'ai un fichier .csv (un fichier texte séparé par des ";" en gros) qui a cette forme :
nom_job;lien_sort;id_col_sort;nom_col_sort
et un autre contenant :
id_table;nom_lien;nom_job
Et je voudrais obtenir l'id de la table à laquelle appartient chaque colonne (avec nom_job=nom_job et lien_sort=nom_lien), donc le fichier :
nom_job;lien_sort;id_col_sort;id_table;nom_col_sort
Je peux faire ça avec awk ? Comment ?