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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [UNIX] Contaténer des fichiers avec des colonnes différentes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[UNIX] Contaténer des fichiers avec des colonnes différentes

n°375872
Yonel
Monde de merde !
Posté le 29-04-2003 à 12:30:53  profilanswer
 

Bon voilà, en gros j'ai 2 fichiers (en fait j'en ai bcp plus mais si je peux le faire avec 2 je peux le faire avec n) et je voudrais les concaténer par les colonnes.
 
sur la première ligne, c'est un entête avec les noms des colonnes. Sur les lignes suivantes il y a les enregistrements
 
avec un exemple ce sera plus compréhensible:
 
Fichier 1:
 
Date,Heure,Util,Mat,Action,Info,Rubrique,Machin    } entête
là ya les enregistrements   { ... ... ...
 
Fichier2:
 
Date,Heure,Util,Mat,Action,Info,Période,Bidule   } entête
là ya les enregistrements   { ... ... ...
 
Bon donc comme vous le voyez, on a des attributs communs aux deux fichiers (ici Date, Heure,Util,Mat,Action,Info) et d'autres spécifiques.
 
Le but c'est d'arriver à faire un seul et même fichier, par exemple:
 
FichierFinal:
Date,Heure,Util,Mat,Action,Info,Rubrique,Machin,Période,Bidule
et bien sûr les enregistrements en dessous dans le bon ordre
 
Avec un cat c pas la bonne solution puisqu'il ne fait pas des traitements sur les colonnes. J'ai pensé à la commande awk mais ça n'a pas donné grand chose  :(  
 
Voilà... si vous avez des idées, je suis preneur  :jap:


Message édité par Yonel le 29-04-2003 à 14:32:34
mood
Publicité
Posté le 29-04-2003 à 12:30:53  profilanswer
 

n°375962
phosphorus​68
Pseudo à n°
Posté le 29-04-2003 à 13:48:50  profilanswer
 

awk est spécialement conçu pour ça!
 
Il est multi-fichier mais là c'est pas simple (jamais fait).
 
En fait il y a des colonnes communes et d'autres qui ne sont que dans 1 ou bien dans 2?
Avant de lancer awk je verrais un pré-calcul sur chque 1ère ligne de fichier n pour compter le nombre final de colonnes qu'il faudra.
Tu lis et si tu l'as pas déjà tu auras 1 colonne de +
 
Le but étant de préparer la 1ère colonne du fichier final (avec un BEGIN{} pour chaque fichier en entrée)
Ensuite c'est du remplissage, tu mets la colonne x du fichier n dans la bonne colonne en sortie ou sinon un code pour "rien".
 
Mais c'est chaud car ça utilise les tableaux et le multi-fichier avec BEGIN, toutes les options puissantes mais pas simples d'AWK.
 
Un lien que j'aime bien:
http://www.ai.univ-paris8.fr/~fb/Cours/MRD/awk.html

n°376023
Yonel
Monde de merde !
Posté le 29-04-2003 à 14:01:57  profilanswer
 

phosphorus68 a écrit :

awk est spécialement conçu pour ça!
 
Il est multi-fichier mais là c'est pas simple (jamais fait).
 
En fait il y a des colonnes communes et d'autres qui ne sont que dans 1 ou bien dans 2?
Avant de lancer awk je verrais un pré-calcul sur chque 1ère ligne de fichier n pour compter le nombre final de colonnes qu'il faudra.
Tu lis et si tu l'as pas déjà tu auras 1 colonne de +
 
Le but étant de préparer la 1ère colonne du fichier final (avec un BEGIN{} pour chaque fichier en entrée)
Ensuite c'est du remplissage, tu mets la colonne x du fichier n dans la bonne colonne en sortie ou sinon un code pour "rien".
 
Mais c'est chaud car ça utilise les tableaux et le multi-fichier avec BEGIN, toutes les options puissantes mais pas simples d'AWK.
 
Un lien que j'aime bien:
http://www.ai.univ-paris8.fr/~fb/Cours/MRD/awk.html


 
merci BEAUCOUP pour ton aide  :jap: . Je vais y réfléchir

n°376060
phosphorus​68
Pseudo à n°
Posté le 29-04-2003 à 14:16:58  profilanswer
 

Raaah, ça me revient que maintenant!
Une fonction que j'ai jamais utilisé personnellement mais très puissante: uniq (enfin un prg pas une fct)
 
Pour avoir toutes les colonnes de tous les fichiers une fois et une seule:
 
head -1 de chaque fichier (ou bien ne traiter avec AWK que la 1ère ligne qd NR==1)
Boucle for qui traite les NF colonnes de chaque fichier: dans la boucle tu écris une colonne par ligne en sortie
A B C  
A B D E  
deviendra
A
B
C
A
B
D
E
 
tu envoies ça (par pipe ou par relecture d'un fichier temporaire)
à sort et surtout uniq qui ne gardera que:
A
B
C
D
E
 
et là tu reprends AWK pour en refaire une longue ligne plutôt qu'une haute colonne (concaténer avec printf sans retour à la ligne mais un tab à la place $0\t et pas $0\n)


Message édité par phosphorus68 le 29-04-2003 à 14:18:24
n°376100
Yonel
Monde de merde !
Posté le 29-04-2003 à 14:28:46  profilanswer
 

phosphorus68 a écrit :

Raaah, ça me revient que maintenant!
Une fonction que j'ai jamais utilisé personnellement mais très puissante: uniq (enfin un prg pas une fct)
 
Pour avoir toutes les colonnes de tous les fichiers une fois et une seule:
 
head -1 de chaque fichier (ou bien ne traiter avec AWK que la 1ère ligne qd NR==1)
Boucle for qui traite les NF colonnes de chaque fichier: dans la boucle tu écris une colonne par ligne en sortie
A B C  
A B D E  
deviendra
A
B
C
A
B
D
E
 
tu envoies ça (par pipe ou par relecture d'un fichier temporaire)
à sort et surtout uniq qui ne gardera que:
A
B
C
D
E
 
et là tu reprends AWK pour en refaire une longue ligne plutôt qu'une haute colonne (concaténer avec printf sans retour à la ligne mais un tab à la place $0\t et pas $0\n)


 
ouep j'ai déjà utilisé le prog uniq, très puissant combiné avec un sort  :) .
Par contre je ne comprends pas tout à ton message. NF et NR ça veut dire koi?
et puis un autre pb c que ya des enregistrements derrière... donc à la limite avec cette technique je pourrai faire un entête correct, mais pas garder les enregistrements... à moins qu'il y ait quelque chose qui m'échappe  :??:

n°376129
phosphorus​68
Pseudo à n°
Posté le 29-04-2003 à 14:33:49  profilanswer
 

NF nombre de colonnes de la ligne en cours de traitement
NR n° de ligne qu'on est en train de traiter
 
Ce sont les 2 variables spécifiques à AWK les plus utilisées (il y en a d'autres)
 
Le uniq ct pour préparer une 1ère ligne avec toutes les colonnes possibles à partir des 1ères lignes des n fichiers, une sorte de pré-traitement.
Mais après (vaut mieux faire un script quitte à lancer plusieurs fois awk)) il faut encore remplir ce fichier de sortie avec certaines colonnes remplies et d'autres vides selon les fichiers d'entrée ... Bonjour l'utilisation des tableaux dans cette 2ème étape ;)

n°376144
Yonel
Monde de merde !
Posté le 29-04-2003 à 14:36:30  profilanswer
 

phosphorus68 a écrit :

NF nombre de colonnes de la ligne en cours de traitement
NR n° de ligne qu'on est en train de traiter
 
Ce sont les 2 variables spécifiques à AWK les plus utilisées (il y en a d'autres)
 
Le uniq ct pour préparer une 1ère ligne avec toutes les colonnes possibles à partir des 1ères lignes des n fichiers, une sorte de pré-traitement.
Mais après (vaut mieux faire un script quitte à lancer plusieurs fois awk)) il faut encore remplir ce fichier de sortie avec certaines colonnes remplies et d'autres vides selon les fichiers d'entrée ... Bonjour l'utilisation des tableaux dans cette 2ème étape ;)


 
ouep je v réfléchir à ça  :)  
mais je suis sur la bonne voie grâce à toi  :jap:


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

  [UNIX] Contaténer des fichiers avec des colonnes différentes

 

Sujets relatifs
Cherche structure des fichiers rss !Erreur d'arrondi différentes en mode Debug ou Release
[ASP] Comment uploader des fichiers sur un ftp ?[cvs] commit/update passent des fichiers en readonly!?
lire les fichiers de soul calibur2ZIP SFX pour windows genere sous unix (IBM AIX)
Questions sur les fichiers ....Access, Vb et fichiers bdf
SQL - update dans plusieurs fichiers[C] lecture fichiers / calcul / reecriture
Plus de sujets relatifs à : [UNIX] Contaténer des fichiers avec des colonnes différentes


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