[ C shell] récupération/remplacement
Fermé
xavdoug
Messages postés
21
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2007
-
16 nov. 2007 à 05:55
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 16 nov. 2007 à 16:02
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 16 nov. 2007 à 16:02
A voir également:
- [ C shell] récupération/remplacement
- Coco chat remplacement - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Uptobox remplacement - Accueil - Services en ligne
- Classic shell windows 11 - Télécharger - Personnalisation
- Convertisseur récupération de texte - Guide
3 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 nov. 2007 à 09:35
16 nov. 2007 à 09:35
Salut,
Tu peux faire ça avec "awk" et "sed" :
Tu peux faire ça avec "awk" et "sed" :
% cat fichier1 34092 75282 30002 38990 12093 23902 45291 38493 29382 28371 ... 99281 21029 29302 10928 28737 % cat fichier2 39202 20891 97363 27682 19736 19827 29730 29737 10283 46583 ligne3 ligne4 ligne5 39827 45628 39822 39837 29837 10928 23083 29817 39872 10290 ligne8 ligne9 ligne10 # Définition des variables % set val1=`awk ' NR==1 { print $1 }' fichier1` % set val2=`awk 'END { NR==FNR ; print $1 }' fichier1` % set val3=`awk ' NR==6 { print $2 }' fichier2` % set val4=`awk ' NR==7 { print $3 }' fichier2` # La commande de substitution. #+ Pour une substitution effective, rajouter l'option "-i.BAK" à sed % sed -e "s/$val3/$val1/;s/$val4/$val2/" fichier2 39202 20891 97363 27682 19736 19827 29730 29737 10283 46583 ligne3 ligne4 ligne5 39827 34092 39822 39837 29837 10928 23083 99281 39872 10290 ligne8 ligne9 ligne10 %;-))
xavdoug
Messages postés
21
Date d'inscription
samedi 21 avril 2007
Statut
Membre
Dernière intervention
16 novembre 2007
16 nov. 2007 à 15:32
16 nov. 2007 à 15:32
Merci pour ta solution.
Pour la récupération des variables, ça marche super bien.
Il y a cependant un soucis quand je substitue : si le chiffre d'origine du fichier2 se trouve à plusieurs endroits et que je veux le substituer à un seul endroit, comment adapter ton code ? (car, si j'ai bien compris, il va subtituer à chaque occurrence du nombre dans le fichier2)
En fait, au lieu de substituer telle ligne et tel endroit du fichier2, j'aimerais lui dire de substituer à la seule ligne du fichier où se trouve le mot "start".
Vu que le format de la ligne à substituer est le suivant :
<START:74640>
où 74640 est le chiffre à substituer par le premier chiffre récupéré du fichier1, il suffirait de faire :
echo "<START:"$var1">" > fichier2.txt
ou quelque chose dans ce genre-là.
Reste à savoir comment on fait pour obtenir seulement le numéro de la ligne (avec grep -n on obtient un seul bloc que je n'arrive pas à dissocier, et donc je n'arrive pas à avoir le seul numéro de ligne), et comment on fait pour substituer la ligne (la seule et l'unique) où se trouve le mot START par le output d'une commande echo ...
En bref, pour résumer, la difficulté provient du fait que la ligne que je veux remplacer n'est pas un string constant et d'utiliser un 'sed -i.bak -e' pourrait provoquer des erreurs en remplaçant le chiffre à d'autres endroits du fichier.
Encore merci de ton aide ...
Pour la récupération des variables, ça marche super bien.
Il y a cependant un soucis quand je substitue : si le chiffre d'origine du fichier2 se trouve à plusieurs endroits et que je veux le substituer à un seul endroit, comment adapter ton code ? (car, si j'ai bien compris, il va subtituer à chaque occurrence du nombre dans le fichier2)
En fait, au lieu de substituer telle ligne et tel endroit du fichier2, j'aimerais lui dire de substituer à la seule ligne du fichier où se trouve le mot "start".
Vu que le format de la ligne à substituer est le suivant :
<START:74640>
où 74640 est le chiffre à substituer par le premier chiffre récupéré du fichier1, il suffirait de faire :
echo "<START:"$var1">" > fichier2.txt
ou quelque chose dans ce genre-là.
Reste à savoir comment on fait pour obtenir seulement le numéro de la ligne (avec grep -n on obtient un seul bloc que je n'arrive pas à dissocier, et donc je n'arrive pas à avoir le seul numéro de ligne), et comment on fait pour substituer la ligne (la seule et l'unique) où se trouve le mot START par le output d'une commande echo ...
En bref, pour résumer, la difficulté provient du fait que la ligne que je veux remplacer n'est pas un string constant et d'utiliser un 'sed -i.bak -e' pourrait provoquer des erreurs en remplaçant le chiffre à d'autres endroits du fichier.
Encore merci de ton aide ...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 nov. 2007 à 16:02
16 nov. 2007 à 16:02
A partir du moment où on a un indicatif concernant la ligne où doit être effectué le changement, il suffit à ce moment là de le spécifier dans la commande "sed" :
sed -e "/START/ s/$val3/$val1/" fichier2et si il y a plusieurs occurrences de la valeur sur la même ligne, il suffit aussi de lui dire laquelle doit être remplacée (par exemple ici la 1ère) :
sed -e "/START/ s/$val3/$val1/1" fichier2;-))