Concat de fichiers

Fermé
bouna - 16 juin 2010 à 00:42
 bouna - 16 juin 2010 à 12:51
Bonjour,
avec ce script ci-dessous,j'arrivais a reunir les fichiers a1,a2 vers a3 et un fichier de rejet.
awk 'BEGIN{FS=OFS="|"};NF<4 {x[$1]=$2;z[$1]=$0}; NF>4 {if(!x[$1]){print > "a4";next}; $2=x[$1] OFS $2;print;z[$1]=""};END{for(n in z)if(z[n])print z[n] > "a4"}' a2 a1 > a3
voici le contenu des fichiers:
a1:
85884769370|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|
08235367539|02900|Bassirou |DILLO|13081967|LOUGA|17052010|
98545784521|02000|Babacar |DOUMBIA|31121955|THIES|17052010|
53677448920|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|
15566728777|01700|ALI |DIOP|29031975|MALI|17052010|
77992939257|00700|Bintou |NDIAYE|24041973|DAKAR|17052010|

a2:
85884769370|030|
08235367539|050|
98545784521|051|
53677448920|060|
15566728777|070|
77992939257|071|

le fichier onbtenu a3 est:
85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|
98545784521|051|02000|Babacar |DOUMBIA|31121955|THIES|17052010|
53677448920|060|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|
15566728777|070|01700|ALI |DIOP|29031975|MALI|17052010|
77992939257|071|00700|Bintou |NDIAYE|24041973|DAKAR|17052010|

mon pb aujourd'hui est que le fichier A2 a changé pour etre:
new a2:
85884769370|030|2557245308|
08235367539|050|4597890000|
98545784521|051||
53677448920|060|7658909098|
15566728777|070|2367997675|
77992939257|071|8763088807|

MERCI DE ME MODIFIER LE SCRIPTE POUR QUE JE SUISSE AVOIR
a3:
85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|2557245308|
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|4597890000|
98545784521|051|02000|Babacar |DOUMBIA|31121955|THIES|17052010||
53677448920|060|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|
15566728777|070|01700|ALI |DIOP|29031975|MALI|17052010|7658909098|
77992939257|071|00700|Bintou |NDIAYE|24041973|DAKAR|17052010|8763088807|


A voir également:

1 réponse

ripat_ Messages postés 60 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 29 juillet 2010 6
Modifié par ripat_ le 16/06/2010 à 08:55
Bonjour,

Ceci semble donner le résultat demandé:
awk 'BEGIN{FS=OFS="|"}FNR==NR{b[$1]=$1FS$2;c[$1]=$3;next}{print b[$1],$2,$3,$4,$5,$6,$7,c[$1]FS}' a2 a1


Ceci dit, le fichier de sortie que tu donnes en exemple semble comporter des erreurs:

85884769370|030|01800|Moussa |sarr|01061982|SAINT LOUIS|17052010|2557245308|
08235367539|050|02900|Bassirou |DILLO|13081967|LOUGA|17052010|4597890000|
98545784521|051|02000|Babacar |DOUMBIA|31121955|THIES|17052010||
53677448920|060|03500|Fatou |SILLA|27101965|COTE IVOIRE|17052010|
15566728777|070|01700|ALI |DIOP|29031975|MALI|17052010|7658909098|
77992939257|071|00700|Bintou |NDIAYE|24041973|DAKAR|17052010|8763088807|
0
oui cela marche ce cas avec 6 enregistrements, mais mon fichier peut varier
0
ripat_ Messages postés 60 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 29 juillet 2010 6
Modifié par ripat_ le 16/06/2010 à 10:31
Quel fichier peut contenir plus de 6 champs? a1?

Donnes un exemple complet et réaliste qui englobe tous les cas possibles sinon on va tourner en rond.
0
- le fichier a1 et a2 doivent avoir tjrs le meme nombre d'enregistrement.
- le premier champs de a1 et a2 doivent etre exactement le meme, sinon s'il y a des enregistremes manquant soit ds a1 soit a2 ils doivent etre envoyer ds a4.
Aujourd'hui le script fonction tres bien, le seul pb est que a2 a herité d'un colonne en plus(il etait a 2colonnes il passe a 3colonnes)
0
Bonjour Dubcek,
vous m'avais aidé pour ce script decri plus haut.. il y a une evolution ds mon fichier a2 (au lieu de 2colonnes c'est maintenant 3col)
0