#1 Le 18/11/2011, à 15:03
- Wolf
[R]Ptit script pour generer un fichier dependant d'un autre ..
Bonjour,
Je suis pas un fortiche en programmation même si j'ai quelques notions.
J'aimerais savoir quel langage serait le plus judicieux pour réaliser la chose suivante :
générer un fichier de cette forme là : fichierfinal
toto33-xx-z
toto33-xx-z
.....
ou "xx" est diffèrent mais pas le reste.
Le xx serait récupérer depuis un fichier que j'aurais remplis de manière la plus simple : serie de chiffres à la ligne.
Exemple : fichiersource : fichier contenant des chiffres : 7874214571
fichier que j'aimerais générer après la moulinette (dans l'exemple) : fichierfinal
toto33-78-z
toto33-74-z
toto33-21-z
toto33-45-z
toto33-71-z
(ou mieux, l'avoir dans le presse-papier en gardant bien la forme "à la ligne, mais ça peut être en v2 ça).
Est-ce compliqué à réaliser ? Vers quoi s'orienter ?
Merci
Dernière modification par Wolf (Le 25/03/2016, à 10:51)
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#2 Le 18/11/2011, à 15:22
- sputnick
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
N'importe quel langage genre python, ruby, perl mais le shell (bash) devrais suffire si tu des besoins basiques sur des fichiers qui font pas 40 GO.
Je prends en spec que tes chiffres ne sont pas séparés comme dans ton exemple, ça serais plus facile séparés avec des espaces ou des retours à la lignes
#!/bin/bash
# on recupere la ligne de chiffres (dans mon exemple, la 1°)
stuff="$(head -n1 "$1")"
# on compte le nombre de caractères de la variable stuff
len=$(wc -c <<< "$stuff")
# on itère sur chaque paire de caractères de la variable stuff
for ((c=1, d=2; d < len; c+=2, d+=2)); do
echo "toto33-$(cut -c$c,$d <<< "$stuff")z" >> fichierfinal
done
cat fichierfinal
Dernière modification par sputnick (Le 18/11/2011, à 16:59)
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr
Hors ligne
#3 Le 18/11/2011, à 15:31
- Nemesis
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
#!/bin/ksh
if [ $# -lt 3 ]
then
echo "usage: `basename $0` <fichier source> <modele> <fichier final>"
exit 1
fi
source=$1
modele=$2
result=$3
cp $source $source.tmp
cat /dev/null > $result
while [ `cat $source.tmp | wc -c` -gt 1 ]
do
cp $source.tmp $source.tmp2
nb=`cat $source.tmp2 | sed -n 's/^\([0-9]\{2\}\)\([0-9]*\)$/\1/p'`
cat $source.tmp2 | sed -n 's/^\([0-9]\{2\}\)\([0-9]*\)$/\2/p' > $source.tmp
echo $modele | sed "s/-xx-/-$nb-/g" >> $result
done
cat $result
rm $source.tmp $source.tmp2
Grillé
Pour ma défense j'avais l'inclusion dans le template en plus ^^
Par contre j'ai jamais pensé à variabiliser mes cut... Plus simple qu'avec des sed en fait ^^
Dernière modification par Nemesis (Le 18/11/2011, à 15:36)
Hors ligne
#4 Le 18/11/2011, à 15:32
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Merci !
J'analyse ça et je te dis ce que j'ai compris / ce que ça donne !
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#5 Le 18/11/2011, à 15:33
- redo_fr
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Salut,
en python, ça pourrait donner
#! /usr/bin/env python
import sys
ligne = sys.argv[1]
fichier = open('/tmp/fichier.lst','w')
for index in range(0,len(ligne),2):
fichier.write( "toto33-%s-z\n" % (ligne[index:index+2],) )
fichier.close()
Dernière modification par redo_fr (Le 18/11/2011, à 15:36)
Il n'y a pas de mauvais outils, il n'y a que de mauvais ouvriers
- papy -
Personnellement, je crois que faire des procès est un signe que les affaires vont mal. Je ne dis pas que Microsoft va mal, ce n'est qu'un signe, pas un indicateur...
- Linus Torvalds -
Hors ligne
#6 Le 18/11/2011, à 15:50
- sputnick
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Code mis à jour pour formater la sortie avec toto* et rediriger vers fichierfinal
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr
Hors ligne
#7 Le 18/11/2011, à 15:58
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
J'essai tout ça et je vous fait un feetback
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#8 Le 18/11/2011, à 16:06
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
@sputnick : Merci, cela fonctionne nickel !!!
Maintenant, avec la V2, y'a moyen de copier le résultat aussi dans le presse-papier (en conservant le retour charriot ?)
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#9 Le 18/11/2011, à 16:10
- sputnick
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Oui,
./script | xsel
à la place de xsel tu peut installer aussi xclip, tout deux fonctionneront
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr
Hors ligne
#10 Le 18/11/2011, à 16:21
- Nemesis
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Code mis à jour pour formater la sortie avec toto* et rediriger vers fichierfinal
tu as mis le nombre à la fin au lieu de le mettre au milieu, non?
Hors ligne
#11 Le 18/11/2011, à 16:26
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Excellent !!
Merci à tous de votre aide !
Je pense que j'aurais galérer tout seul !!!
Génial !
Votre aide à embellie ma journée ^^'
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#12 Le 18/11/2011, à 16:33
- sputnick
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Merci Wolf :þ
@Nemesis, j'ai repris soigneusement l'exemple de sieur Wolf
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr
Hors ligne
#13 Le 18/11/2011, à 16:44
- Nemesis
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
@Nemesis, j'ai repris soigneusement l'exemple de sieur Wolf
Je dois fatiguer alors.
echo "toto33-z$(cut -c$c,$d <<< "$stuff")", ça ne produit pas toto33-z78 au lieu de toto33-78-z ?
Hors ligne
#14 Le 18/11/2011, à 16:57
- sputnick
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Oui, c'est moi qui suis pas réveille, mais c'est pas très important, la modification est tout à fait triviale et ne change en rien l'algo
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr
Hors ligne
#15 Le 18/11/2011, à 17:03
- Nemesis
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
En effet
Hors ligne
#16 Le 18/11/2011, à 17:11
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
sputnick a écrit :@Nemesis, j'ai repris soigneusement l'exemple de sieur Wolf
Je dois fatiguer alors.
echo "toto33-z$(cut -c$c,$d <<< "$stuff")", ça ne produit pas toto33-z78 au lieu de toto33-78-z ?
Ne vous inquiétez pas, j'ai modifié en conséquence ..
Et j'ai aussi réussit à comprendre le script. J'évite les bêtes copier / coller, cela ne m'apporte rien d'intéressant ^^
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#17 Le 27/03/2012, à 13:27
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
# on itère sur chaque paire de caractères de la variable stuff for ((c=1, d=2; d < len; c+=2, d+=2)); do echo "toto33-$(cut -c$c,$d <<< "$stuff")z" >> fichierfinal done
Bonjour,
Pourrais-tu, s'il te plait, me détailler cette partie du script, notamment la ligne :
for ((c=1, d=2; d < len; c+=2, d+=2)); do
Merci.
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#18 Le 27/03/2012, à 13:52
- sputnick
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Salut,
bien sur, pas de souci :
la premiere explication :
(( ))
est la forme arithmétique de bash
La base :
for (( <initialisation de(s) variable(s)> <condition> <modification de(s) variable(s)> ))
ce genre de boucles d’itération, s’appelle for C-style puisqu'empruntée au langage C, une plus basique :
for ((i=0; i<10; i++)); do echo $i; done
donc notre boucle
for ((c=1, d=2; d < len; c+=2, d+=2))
en est une version plus avancé de la simple :
on initialise c à 1 et d à 2
on vérifie que la valeur de d est inférieur à len (inutile de vérifier les 2 variables même si c'est possible)
si c'est le cas
on incrémente la variable c et d de 2 à chaque tour de boucle
on refais un tour de boucle...
si c'est pas le cas
on sort de la boucle (elle s’arrête)
Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr
Hors ligne
#19 Le 27/03/2012, à 14:16
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Merci
Grâce à tes explications, j'ai pu modifier le code pour faire le script en version V2
En gros, sur la ligne n° 1 sont écrit les chiffres qui seront utilisé pour la boucle sur deux décimales : toto-12-prout.
Et sur la ligne n°3, c'est pour 3 décimales (ce que je viens de créer en partant de ton fichier source) : toto-123-prout.
Youpi
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#20 Le 27/03/2012, à 15:57
- pingouinux
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Salut,
Comme l'a dit sputnick au #2, si les nombres sont séparés par des espaces ou des sauts de ligne, c'est beaucoup plus facile, et on ne se préoccupe pas de la longueur des nombres.
$ cat fichiersource
78 74 21
45 71 258
$ for n in $(cat fichiersource); do echo "toto33-$n-z"; done
toto33-78-z
toto33-74-z
toto33-21-z
toto33-45-z
toto33-71-z
toto33-258-z
Dernière modification par pingouinux (Le 27/03/2012, à 15:57)
Hors ligne
#21 Le 02/03/2016, à 11:59
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Bonjour,
Je déterre ce topic ...
J'utilise toujours ce petit script que vous m'avez largement aidé à réaliser.
Néanmoins, concernant la sortie finale, n'est-il pas possible d'avoir un tri ?
Ce qui donnerai :
fichier source : 47851687
fichier final :
toto33-16-z
toto33-47-z
toto33-85-z
toto33-87-z
Merci
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#22 Le 02/03/2016, à 12:40
- pingouinux
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Bonjour,
Il faut que tu supposes que les nombres ont 2 chiffres, si tu veux les distinguer.
printf "toto33-%s-z\n" $(grep -o '..' fichiersource|sort -n)
Hors ligne
#23 Le 24/03/2016, à 13:35
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Bonjour,
Il faut que tu supposes que les nombres ont 2 chiffres, si tu veux les distinguer.printf "toto33-%s-z\n" $(grep -o '..' fichiersource|sort -n)
Bonjour,
Oui, c'est bien le cas.
2 nombres car cela va de 61 à 99.
Puis 3 nombres allant de 100 à 115.
Donc c'est jouable ?
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne
#24 Le 24/03/2016, à 13:47
- pingouinux
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Le mieux est que tu donnes un exemple de fichier d'entrée, mais s'il y a un mélange de nombres à 2 et 3 chiffres, sans séparation entre eux, je ne vois pas.
Hors ligne
#25 Le 24/03/2016, à 14:01
- Wolf
Re : [R]Ptit script pour generer un fichier dependant d'un autre ..
Voici le fichier d'entré.
fichier "comptes" :
6178699189
107115103
"On a pas besoin de leurs dollars. Juste des rêves et sa guitare".
Hors ligne