Script shell pour extraire une un nombre et le doubler
Lte_blizzard
-
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je débute en programmation shell et je galère pas mal! J'aurais besoin d'un coup de main.
Voilà, dans un dossier, j'ai un certain nombre de fichiers de structures identiques, contenant un nombre qui varie et que je dois multiplier par deux.
En gros voici l'un de ces fichiers:
[DURATION]
InSecond=30
[MODULES]
[...]
Le nombre à droite d'InSecond doit être doublé. Je dois faire ça pour tous les fichiers, sachant que ce nombre peut varier mais il se trouve toujours au même endroit.
Merci de votre aide
Je précise au cas où qu'il s'agit d'un script sh à exécuter sous cygwin...
Je débute en programmation shell et je galère pas mal! J'aurais besoin d'un coup de main.
Voilà, dans un dossier, j'ai un certain nombre de fichiers de structures identiques, contenant un nombre qui varie et que je dois multiplier par deux.
En gros voici l'un de ces fichiers:
[DURATION]
InSecond=30
[MODULES]
[...]
Le nombre à droite d'InSecond doit être doublé. Je dois faire ça pour tous les fichiers, sachant que ce nombre peut varier mais il se trouve toujours au même endroit.
Merci de votre aide
Je précise au cas où qu'il s'agit d'un script sh à exécuter sous cygwin...
3 réponses
-
Pas la plus belle des manières mais qui marche en bash et awk:
for file in ./*;do awk -F'=' '{if($1 == "InSecond"){print "InSecond="$2*2}else{print $0}}' $file > $file;done
Attention les nouveau fichiers écrasent les anciens-
merci pour cette réponse hyper rapide
J'ai ajouté ton code dans mon script double_duration.sh mais j'ai le résultat suivant:
$ ./double_duration.sh
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
awk: not found
Y-a-il quelque chose à paramétrer? -
-
-
-
-
-
ATTENTION
Non seulement ça va les écraser, mais ça va même les vider, car la redirection intervient avant la lecture.
Donc, awk va lire un fichier vide :(
Il faut utiliser un fichier temporaire, puis le copier sur le fichier original. -
hello
en perl, avec sauvegarde des fichers en .bakperl -i.bak -pe 's/(^InSecond=)([0-9]+)/sprintf("%s%d", $1, $2*2)/e' fichiers*