Modification des fichiers
Résolu/Fermé
GHISLINO
Messages postés
214
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2023
-
25 avril 2012 à 15:31
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 27 avril 2012 à 08:29
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 27 avril 2012 à 08:29
A voir également:
- Modification des fichiers
- Suivi des modifications word - Guide
- Logiciel modification pdf gratuit - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
11 réponses
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
26 avril 2012 à 12:17
26 avril 2012 à 12:17
essaye ça, j'ai changé les , en ; dans fichier3
$ awk -F";" 'FNR==1{f++} f==1{f3[$1, $2]=$3} f==2{f2[$3]=$1} f==3{printf $0 FS f3[f2[$4], $6] "\n"}' fichier3 fichier2 fichier1 idbs;idbt;cel;ci;lac;trx;taux;tre 53;45;LOURIA-1;14391;610;2;80;1 53;7;GABIA_ISSIA-3;7843;610;2;10;6 53;12;NAKIAHIO-1;11491;610;2;0;3 53;12;NAKIAHIO-1;11491;610;3;40;2 53;17;GADOUAN-2;7472;610;3;80;8 53;23;KIBOUO-3;7593;610;3;80;6 53;13;BOGUEDIA-1;7351;610;2;80;2 53;47;IBOGUHE-2;14432;610;4;0;7 53;47;IBOGUHE-3;14433;610;2;60;0 $
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 25/04/2012 à 16:09
Modifié par qqchquicommenceparQ le 25/04/2012 à 16:09
salut,
tu dois utiliser la commande 'join' (peut-être plusieurs fois).
tu dois utiliser la commande 'join' (peut-être plusieurs fois).
man join
GHISLINO
Messages postés
214
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2023
25 avril 2012 à 16:47
25 avril 2012 à 16:47
salut ,
je regarde le man de join et je reviens
merci pour le tuyau
je regarde le man de join et je reviens
merci pour le tuyau
GHISLINO
Messages postés
214
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2023
25 avril 2012 à 17:23
25 avril 2012 à 17:23
salut ,
le join ne m' n est pas approprie a mes besoins
j ai essaye plutot ceci
for x in $(cat fichier3.conf); do
ref=$(echo $x | cut -d';' -f 1)
trx=$(echo $x | cut -d';' -f 2)
tre=$(echo $x | cut -d';' -f 3)
for x in $(cat fichier2.conf); do
ref=$(echo $x | cut -d';' -f 1)
cel=$(echo $x | cut -d';' -f 3)
ci=$(echo $x | cut -d';' -f 4)
if [grep -w $ref fichier2 == grep -w $ fichier3] && grep -w $ci fichier2
then
cat fichier | cut -d";" -f 1,2 | sed -e 's/$/;'$tre'/' >>fichierfinal
fi
done
done
le join ne m' n est pas approprie a mes besoins
j ai essaye plutot ceci
for x in $(cat fichier3.conf); do
ref=$(echo $x | cut -d';' -f 1)
trx=$(echo $x | cut -d';' -f 2)
tre=$(echo $x | cut -d';' -f 3)
for x in $(cat fichier2.conf); do
ref=$(echo $x | cut -d';' -f 1)
cel=$(echo $x | cut -d';' -f 3)
ci=$(echo $x | cut -d';' -f 4)
if [grep -w $ref fichier2 == grep -w $ fichier3] && grep -w $ci fichier2
then
cat fichier | cut -d";" -f 1,2 | sed -e 's/$/;'$tre'/' >>fichierfinal
fi
done
done
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
25 avril 2012 à 18:28
25 avril 2012 à 18:28
n'y aurait-il pas un problème dans le format du fichier1 ?
le séparateur de champs n'est pas toujours le point virgule, contrairement à ce que montre l'en-tête.
idbs;idbt;cel;ci;lac;trx;taux
......................^
53;45;LOURIA-1;14391,610;2;80
..................................^
c'est normal?
le séparateur de champs n'est pas toujours le point virgule, contrairement à ce que montre l'en-tête.
idbs;idbt;cel;ci;lac;trx;taux
......................^
53;45;LOURIA-1;14391,610;2;80
..................................^
c'est normal?
GHISLINO
Messages postés
214
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2023
25 avril 2012 à 18:55
25 avril 2012 à 18:55
c est juste une petite erreur qui s'est glisse modifiable par la commande
cat fichier1 | sed s/','/';'/g >> fichier1bis
merci pour la remarque
cat fichier1 | sed s/','/';'/g >> fichier1bis
merci pour la remarque
GHISLINO
Messages postés
214
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2023
26 avril 2012 à 08:41
26 avril 2012 à 08:41
bonjour a tous
avec quelque recherche j ai pu faire correspondre le fichier2 et le fichier3 qui ont c pour point cummun le champ ref donc avec ce petit script j ai pu faire la correspondance entre le champ ref du fichier3 avec le champ ci du fichier2:
for x in $(cat fichier2); do
ref1=$(echo $x | cut -d';' -f 1)
lac=$(echo $x | cut -d';' -f 2)
ci=$(echo $x | cut -d';' -f 3)
cel=$(echo $x | cut -d';' -f 4)
cat fichier3 | grep -w $ref1 | sed -e 's/'$ref1'/'$ci'/' >> ref.txt
done
et j obtiens
le fichier ref.txt suivant
ref.txt
ci,trx,tre
14391,1,2
14391,2,1
7843,3,9
7843,1,5
7843,2,6
11491,2,3
11491,1,1
11491,3,2
7472,2,7
7472,1,6
7472,3,8
7593,3,6
7593,1,5
7593,2,8
7351,2,2
7351,1,1
14432,3,8
14432,4,7
14432,1,10
14432,2,4
14432,3,0
14432,1,0
14432,2,0
la manip consiste maintenantnt a faire la correspondance des champs ci et trx du fichier ref.txt avec les champs ci et trx du fichier1 ci dessous
il faut que les deux conditions soient respecte (ci et trx)
fichier1
idbs;idbt;cel;ci;lac;trx;taux
53;45;LOURIA-1;14391;610;2;80
53;7;GABIA_ISSIA-3;7843;610;2;10
53;12;NAKIAHIO-1;11491;610;2;0
53;12;NAKIAHIO-1;11491;610;3;40
53;17;GADOUAN-2;7472;610;3;80
53;23;KIBOUO-3;7593;610;3;80
53;13;BOGUEDIA-1;7351;610;2;80
53;47;IBOGUHE-2;14432;610;4;0
53;47;IBOGUHE-3;14433;610;2;60
donc sur une ligne recherche ci et trx du fichier1 dans le fichier ref.txt si tu trouve la correspondance alors ajoute le champ tre devant la ligne qui correspond dans le fichier1
voila un peu ce que le script doit faire
merci d'avance pour vos reponse
avec quelque recherche j ai pu faire correspondre le fichier2 et le fichier3 qui ont c pour point cummun le champ ref donc avec ce petit script j ai pu faire la correspondance entre le champ ref du fichier3 avec le champ ci du fichier2:
for x in $(cat fichier2); do
ref1=$(echo $x | cut -d';' -f 1)
lac=$(echo $x | cut -d';' -f 2)
ci=$(echo $x | cut -d';' -f 3)
cel=$(echo $x | cut -d';' -f 4)
cat fichier3 | grep -w $ref1 | sed -e 's/'$ref1'/'$ci'/' >> ref.txt
done
et j obtiens
le fichier ref.txt suivant
ref.txt
ci,trx,tre
14391,1,2
14391,2,1
7843,3,9
7843,1,5
7843,2,6
11491,2,3
11491,1,1
11491,3,2
7472,2,7
7472,1,6
7472,3,8
7593,3,6
7593,1,5
7593,2,8
7351,2,2
7351,1,1
14432,3,8
14432,4,7
14432,1,10
14432,2,4
14432,3,0
14432,1,0
14432,2,0
la manip consiste maintenantnt a faire la correspondance des champs ci et trx du fichier ref.txt avec les champs ci et trx du fichier1 ci dessous
il faut que les deux conditions soient respecte (ci et trx)
fichier1
idbs;idbt;cel;ci;lac;trx;taux
53;45;LOURIA-1;14391;610;2;80
53;7;GABIA_ISSIA-3;7843;610;2;10
53;12;NAKIAHIO-1;11491;610;2;0
53;12;NAKIAHIO-1;11491;610;3;40
53;17;GADOUAN-2;7472;610;3;80
53;23;KIBOUO-3;7593;610;3;80
53;13;BOGUEDIA-1;7351;610;2;80
53;47;IBOGUHE-2;14432;610;4;0
53;47;IBOGUHE-3;14433;610;2;60
donc sur une ligne recherche ci et trx du fichier1 dans le fichier ref.txt si tu trouve la correspondance alors ajoute le champ tre devant la ligne qui correspond dans le fichier1
voila un peu ce que le script doit faire
merci d'avance pour vos reponse
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
Modifié par dubcek le 26/04/2012 à 09:27
Modifié par dubcek le 26/04/2012 à 09:27
hello
si je prends les 2 premiers cas, je ne comprends pas la dernière valeur,
dans fichier 3, il y a plusieurs choix, lequel faut-il prendre ?
le lien entre ficher1 et fichier2 c'est cel et le lien entre fichier2 et fichier3 c'est ref ?
si je prends les 2 premiers cas, je ne comprends pas la dernière valeur,
dans fichier 3, il y a plusieurs choix, lequel faut-il prendre ?
le lien entre ficher1 et fichier2 c'est cel et le lien entre fichier2 et fichier3 c'est ref ?
Fichier1 idbs;idbt;cel;ci;lac;trx;taux 53;45;LOURIA-1;14391,610;2;80 53;7;GABIA_ISSIA-3;7843,610;2;10 Fichier 2 ref;lac;ci;cel 14000;610;14391;LOURIA-1 10068;610;7843;GABIA_ISSIA-3 Fichier3 ref,trx,tre 14000,1,2 14000,2,1 10068,3,9 10068,1,5 10068,2,6 je veux obtenir un fichier final comme ceci Fichierfinal idbs;idbt;cel;ci;lac;trx;taux;tre 53;45;LOURIA-1;14391,610;2;80;2 53;7;GABIA_ISSIA-3;7843,610;2;10;6
GHISLINO
Messages postés
214
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2023
26 avril 2012 à 09:33
26 avril 2012 à 09:33
salut
en fait le fichier est faux car il faut respecter les champs ci dans les fichier1 et fichier2 mais aussi les champ trx dans le fichier1 et fichier3 pour trouver le fichier final avec ajout du tre correspondant
donc le fichier final tu auras
idbs;idbt;cel;ci;lac;trx;taux;tre
53;45;LOURIA-1;14391,610;2;80;1
53;7;GABIA_ISSIA-3;7843,610;2;10;6
en fait le fichier est faux car il faut respecter les champs ci dans les fichier1 et fichier2 mais aussi les champ trx dans le fichier1 et fichier3 pour trouver le fichier final avec ajout du tre correspondant
donc le fichier final tu auras
idbs;idbt;cel;ci;lac;trx;taux;tre
53;45;LOURIA-1;14391,610;2;80;1
53;7;GABIA_ISSIA-3;7843,610;2;10;6
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
Modifié par dubcek le 26/04/2012 à 10:24
Modifié par dubcek le 26/04/2012 à 10:24
je vois mieux, il me manquait un champ,mais j'ai lu le post #5 et remplacé la virgule
GHISLINO
Messages postés
214
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
8 décembre 2023
27 avril 2012 à 03:19
27 avril 2012 à 03:19
salut dubeck
merci beaucoup pour le tuyau en effet j 'ai trouver ou ca clochait c 'etait les virgules du fichier3 que je n avais pas modifie en point virgule.
merci encore c est super.
mais peux tu m expliquer un peu car il faut que je comprenne pour que je puisse voler de mes propes ailes
merci d'avance
awk -F";" 'FNR==1{f++} f==1{f3[$1, $2]=$3} f==2{f2[$3]=$1} f==3{printf $0 FS f3[f2[$4], $6] "\n"}' fichier3 fichier2 fichier1
ce que j ai compris :
-F";" pour definir le separateur ;
FNR==1 le nombre d'enregitrement a la sortie
{f++} plusieurs lignes d'enregistrement
f==1{f3[$1, $2]=$3} le fichier1 est egale au fichier a condition que le champ $1 et $2 soit verifier dans le fichier1 alors est egale $3 du fichier3
voila ce que j ai pu comprendre dan ce code merci de me corriger
cdlt.
merci beaucoup pour le tuyau en effet j 'ai trouver ou ca clochait c 'etait les virgules du fichier3 que je n avais pas modifie en point virgule.
merci encore c est super.
mais peux tu m expliquer un peu car il faut que je comprenne pour que je puisse voler de mes propes ailes
merci d'avance
awk -F";" 'FNR==1{f++} f==1{f3[$1, $2]=$3} f==2{f2[$3]=$1} f==3{printf $0 FS f3[f2[$4], $6] "\n"}' fichier3 fichier2 fichier1
ce que j ai compris :
-F";" pour definir le separateur ;
FNR==1 le nombre d'enregitrement a la sortie
{f++} plusieurs lignes d'enregistrement
f==1{f3[$1, $2]=$3} le fichier1 est egale au fichier a condition que le champ $1 et $2 soit verifier dans le fichier1 alors est egale $3 du fichier3
voila ce que j ai pu comprendre dan ce code merci de me corriger
cdlt.
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 621
27 avril 2012 à 08:29
27 avril 2012 à 08:29
-F";" on definit le séparateur de champ FNR==1{f++} FNR égale 1 quand on débute le traitement d'un fichier, donc f=1 pour fichier3, 2 pour fichier2, etc f==1{f3[$1, $2]=$3} on traite fichier3, on stocke dans un tableau f3[ref, trx]=tre f==2{f2[$3]=$1} pour fichier2, on stocke f2[ci]=ref f==3{printf $0 FS f3[f2[$4], $6] "\n"}' on imprime fichier1 en ajoutant le taux dans f3, indexé par ref dans f2 et trx (champ 6) dans fichier1