Modif fichier viaun autre fichier de transcodification unix
Résolu/Fermé
JsuisNul
-
27 sept. 2013 à 15:48
dubcek Messages postés 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 - 30 sept. 2013 à 14:34
dubcek Messages postés 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 - 30 sept. 2013 à 14:34
A voir également:
- Modif fichier viaun autre fichier de transcodification unix
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Fichier host - Guide
13 réponses
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 623
27 sept. 2013 à 16:34
27 sept. 2013 à 16:34
hello
$ cat fichier1
champs1;1;champs3;1;champs5;
champs1;2;champs3;2;champs5;
champs1;3;champs3;3;champs5;
$ cat fichier2
1 A
2 B
3 C
$ awk 'BEGIN {while(getline<"fichier2")t[$1]=$2; FS=OFS=";"} {$2=$4=t[$2]; print}' fichier1
champs1;A;champs3;A;champs5;
champs1;B;champs3;B;champs5;
champs1;C;champs3;C;champs5;
Hello Dubcek,
Toujours aussi efficace ;-)
donc si j'ai bien compris dans mon petit script j'ecris ça comme ça ?
cat fichier1
cat fichier 2
awk 'BEGIN {while(getline<"fichier2")t[$1]=$2; FS=OFS=";"} {$2=$4=t[$2]; print}' fichier1
merci.
Toujours aussi efficace ;-)
donc si j'ai bien compris dans mon petit script j'ecris ça comme ça ?
cat fichier1
cat fichier 2
awk 'BEGIN {while(getline<"fichier2")t[$1]=$2; FS=OFS=";"} {$2=$4=t[$2]; print}' fichier1
merci.
j'ai testé et j'ai un message d'erreur comme suit :
hraccess-/softwares/app/hraccess/txt/test_nso> ksh script_test
cccccccccc;ssssssssssss;26;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;26;ttttttttt;
cccccccccc;ssssssssssss;52;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;52;ttttttttt;
cccccccccc;ssssssssssss;27;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;27;ttttttttt;
cccccccccc;ssssssssssss;45;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;45;ttttttttt;
26 nnnn
27 wwww
45 xxxx
52 llll
syntax error The source line is 1.
The error context is
BEGIN >>> {while(getline<$SIGACS/txt/test_nso/fichier2. <<< txt)t[$1]=$2; FS=OFS=";"} {$3=$7=t[$2]; print}
awk: The statement cannot be correctly parsed.
The source line is 1.
est-ce que j'ai mal ecris quelque chose ?
hraccess-/softwares/app/hraccess/txt/test_nso> ksh script_test
cccccccccc;ssssssssssss;26;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;26;ttttttttt;
cccccccccc;ssssssssssss;52;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;52;ttttttttt;
cccccccccc;ssssssssssss;27;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;27;ttttttttt;
cccccccccc;ssssssssssss;45;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;45;ttttttttt;
26 nnnn
27 wwww
45 xxxx
52 llll
syntax error The source line is 1.
The error context is
BEGIN >>> {while(getline<$SIGACS/txt/test_nso/fichier2. <<< txt)t[$1]=$2; FS=OFS=";"} {$3=$7=t[$2]; print}
awk: The statement cannot be correctly parsed.
The source line is 1.
est-ce que j'ai mal ecris quelque chose ?
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 623
28 sept. 2013 à 08:43
28 sept. 2013 à 08:43
les cat sont juste là pour montrer les contenus des fichiers pour l'exemple
si SIGACS est une variable shell:
si SIGACS est une variable shell:
awk -v f="$SIGACS/txt/test_nso/fichier2.txt" 'BEGIN {while(getline<f)t[$1]=$2; FS=OFS=";"} {$3=$7=t[$2]; print} fichier1
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re-bonjour Dubcek,
ok j'ai modifié mon petit script en enlevant les cat et en reprenant ton dernière code et j'ai testé. le "sigacs" remplace le "hraccess-/softwares/app/hraccess/"
awk -v f="$SIGACS/txt/test_nso/fichier2.txt" 'BEGIN {while(getline<f)t[$1]=$2; FS=OFS=";"} {$3=$7=t[$2]; print}' $SIGACS/txt/test_nso/fichier1.txt
Voici le résultat :
hraccess-/softwares/app/hraccess/txt/test_nso> ksh script_test
cccccccccc;ssssssssssss;;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;;ttttttttt;
cccccccccc;ssssssssssss;;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;;ttttttttt;
cccccccccc;ssssssssssss;;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;;ttttttttt;
cccccccccc;ssssssssssss;;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;;ttttttttt;
;;;;;;
;;;;;;
;;;;;;
;;;;;;
J'ai pas l'impression que mon fichier 1 ai été modifié...
ok j'ai modifié mon petit script en enlevant les cat et en reprenant ton dernière code et j'ai testé. le "sigacs" remplace le "hraccess-/softwares/app/hraccess/"
awk -v f="$SIGACS/txt/test_nso/fichier2.txt" 'BEGIN {while(getline<f)t[$1]=$2; FS=OFS=";"} {$3=$7=t[$2]; print}' $SIGACS/txt/test_nso/fichier1.txt
Voici le résultat :
hraccess-/softwares/app/hraccess/txt/test_nso> ksh script_test
cccccccccc;ssssssssssss;;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;;ttttttttt;
cccccccccc;ssssssssssss;;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;;ttttttttt;
cccccccccc;ssssssssssss;;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;;ttttttttt;
cccccccccc;ssssssssssss;;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;;ttttttttt;
;;;;;;
;;;;;;
;;;;;;
;;;;;;
J'ai pas l'impression que mon fichier 1 ai été modifié...
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 623
30 sept. 2013 à 10:59
30 sept. 2013 à 10:59
montre quelques lignes de chaque fichier
selon le post #1, les champs du fichier2 sont séparés par un espace, est-ce le cas ?
selon le post #1, les champs du fichier2 sont séparés par un espace, est-ce le cas ?
Oui c'est le cas mais si c'est plus simple on peut mettre un séparateur genre ";" ?
Voici mes fichiers
Fichier 1:
cccccccccc;ssssssssssss;26;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;26;ttttttttt;
cccccccccc;ssssssssssss;52;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;52;ttttttttt;
cccccccccc;ssssssssssss;27;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;27;ttttttttt;
cccccccccc;ssssssssssss;45;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;45;ttttttttt;
Fichier 2:
26 nnnn
27 wwww
45 xxxx
52 llll
Voici mes fichiers
Fichier 1:
cccccccccc;ssssssssssss;26;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;26;ttttttttt;
cccccccccc;ssssssssssss;52;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;52;ttttttttt;
cccccccccc;ssssssssssss;27;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;27;ttttttttt;
cccccccccc;ssssssssssss;45;zzzzzzzzz;rrrrrrrrrrrrrrr;aaaaaaaaaaaaa;45;ttttttttt;
Fichier 2:
26 nnnn
27 wwww
45 xxxx
52 llll
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 623
30 sept. 2013 à 11:34
30 sept. 2013 à 11:34
il faut modifier
{$3=$7=t[$2]; print}'par
{$3=$7=t[$3]; print}'
J'ai testé et ça fonctionne.
comment dois-je faire pour que la modification se fasse directement dans mon fichiers 1 ?
comment dois-je faire pour que la modification se fasse directement dans mon fichiers 1 ?
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 623
Modifié par dubcek le 30/09/2013 à 12:01
Modifié par dubcek le 30/09/2013 à 12:01
avec awk, on ne peut pas modifier en même temps un fichier qu'on lit, donc par ex:
mv fichier1 fichier1.old
awk ... fichier1.old > fichier1
JsuisNul
Messages postés
123
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
11 février 2025
1
30 sept. 2013 à 13:52
30 sept. 2013 à 13:52
par contre j'arrive pas à trouver le lien pour le marquer "Résolu", tu peux faire quelque chose dubcek ?
dubcek
Messages postés
18764
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
9 février 2025
5 623
30 sept. 2013 à 14:34
30 sept. 2013 à 14:34