Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
synchronisation de plusieurs fichier avec AWK
Envoyé par: Super_Didji

Bonjour à tous,

je vais essayé de vous exposer mon problème :

j'ai un fichier1 (fichier clients) qui contient 5 champs (fichier csv) :
- champ1 est le numéro de client
- champ2 est le nom du client
- champ3 est l'adresse du client
- champ4 est la ville du client
- champ5 est le département du client

soit par exemple :
1 ;dupont ;11 rue des jasmins ;oiseville ;60
2 ;dubois ;12 rue des oeillets ;laville s mer ;76
3 ;durand ;13 rue des roses ;nordville ;59
4 ;dugnou ;14 rue des lilas ;sudville ;34

ce fichier est trié par numéro de client (champ1)

j'ai un fichier2 (fichiers des liens clients/contrats) qui contient 5 champs (fichier csv) :
- champ1 est le numéro de client
- champ2 est le numéro de contrat
- champ3 est le type de contrat
- champ4 est le role du client dans le contrat
- champ5 est le département du client

soit par exemple :
1 ;1 ;0 ;titulaire ;?
1 ;2 ;1 ;bénéficiaire ;?
2 ;2 ;0 ;bénéficiaire ;?
3 ;3 ;0 ;titulaire ;?
3 ;4 ;1 ;titulaire ;?
3 ;5 ;2 ;titulaire ;?

ce fichier est trié par numéro de client

on voit que le champ5 est mal alimenté (?) ; il y a n'importe quoi dedans.

L'objet de ce que je voudrais faire est de l'alimenter correctement. Et donc, à partir des fichier1 et fichier2 construire un fichier3 qui serait le fichier2 corrigé :

dans l'exemple, cela donnerait :

1 ;1 ;0 ;titulaire ;60
1 ;2 ;1 ;bénéficiaire ;60
2 ;2 ;0 ;bénéficiaire ;76
3 ;3 ;0 ;titulaire ;59
3 ;4 ;1 ;titulaire ;59
3 ;5 ;2 ;titulaire ;59

La logique du traitement serait celle-ci :

FF1:=0 init flag fin fichier1
FF2:=0 init flag fin fichier2
FL1:=1 init flag lecture fichier 1
FL2:=1 init flag lecture fichier 2
Tant que FF2 <> 0 alors
...Si FL2=1 et FF2=0 alors
......lire_ligne fichier2
......Si Fin de fichier2 alors
.........FF2:=1
......Sinon
.........Var2:=fichier2.champ1
......Fsi
...Fsi
...Si FL1=1 et FF1=0 alors
......lire_ligne fichier1
......Si Fin de fichier1 alors
.........FF1:=1
......Sinon
.........Var1:=fichier1.champ1
......Fsi
...Fsi
...Si Var1=Var2 alors
......Fichier2.champ5:=Var1
......ligne_Fichier3:=ligne_Fichier2
......Ecrire_ligne Fichier3
......FL1:=0
......FL2:=1
...Sinon
......FL1:=1
......FL2:=0
...Fsi
FinTantque

Ca n'est pas bien compliqué, je pense. Et il me semble que AWK saurait faire ça efficacement. Je connais un peu mais pas suffisamment.

Quelqu'un peut-il m'aider, car pour un AWKman confirmé, ça doit être de la rigolade.

quelques compléments :
======================
les fichiers en question dans la réalité ont quelques dizaines de colonnes (moins de 50) mais aussi quelques millions de lignes.

Avis aux amateurs et merci d'avance.
javascript:editor_tools_handle_smiley()
A votre disposition si besoin d'explications.

Super_Didji

Poste le Friday 12 February 2010 17:12:19
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
synchronisation de plusieurs fichier avec AWK
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons