Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1599 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [ksh]Correspondance entre 2 fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ksh]Correspondance entre 2 fichiers

n°1865942
stagebi
Posté le 25-03-2009 à 23:27:38  profilanswer
 

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 ?

mood
Publicité
Posté le 25-03-2009 à 23:27:38  profilanswer
 

n°1865944
Elmoricq
Modérateur
Posté le 25-03-2009 à 23:32:37  profilanswer
 

Me semble que "join" permet de faire ça. À vérifier avec "man join".

n°1865945
stagebi
Posté le 25-03-2009 à 23:42:19  profilanswer
 

Ah oui effectivement, merci!!

n°1866124
stagebi
Posté le 26-03-2009 à 12:51:17  profilanswer
 

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?

n°1866143
Elmoricq
Modérateur
Posté le 26-03-2009 à 13:23:35  profilanswer
 

Les lignes supplémentaires ne seraient-elles pas les lignes sans correspondance entre les deux fichiers ?

n°1866388
stagebi
Posté le 26-03-2009 à 19:33:10  profilanswer
 

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!

n°1867106
stagebi
Posté le 29-03-2009 à 15:43:47  profilanswer
 

up

n°1870463
Leif Eriks​on
Guess I'm doing fine...
Posté le 07-04-2009 à 10:48:12  profilanswer
 

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 :
  1. awk -F';' -v FICTAB=./fichier_table '\
  2. BEGIN {
  3. OFS = FS
  4. while ((getline < FICTAB) > 0)
  5. {
  6.   cle=$3"#"$2
  7.   ARRAY_KEYS[cle]=1
  8.   ARRAY_ID[cle]=$1
  9. }
  10. }
  11. {
  12. testcle=$1"#"$2
  13. IDTABLE=""
  14. if ( testcle in ARRAY_KEYS ) { IDTABLE=ARRAY_ID[testcle] }
  15. print $1 FS $2 FS $3 FS IDTABLE FS $4
  16. }' ./fichier_cols > ./fichier.out


 
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


---------------
Il n'est qu'une seule chose qui excite les animaux plus que le plaisir, et c'est la douleur.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [ksh]Correspondance entre 2 fichiers

 

Sujets relatifs
Compter le nombre de fichiers de la forme file*.txt en vbscriptNouveaux fichiers avec trop peu de droit [Résolu]
Parser des fichiers PDF avec php.Comprendre code source : liens entre les fichiers
[C#] Comparer les lignes de 2 fichiers txtgestion de fichiers excel à l'aide d'une macro spécifique
[RESOLU]Trier liste de fichiers recherche de fichiers par interval de dates
recherche de fichiers par interval de datesImporter des données de plusieurs fichiers EXCEL vers ACCESS
Plus de sujets relatifs à : [ksh]Correspondance entre 2 fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR