Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2007, 11h27   #1
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut Conversion chaine de caractères en numérique

Bonjour,

Pourrai je faire la conversion d'une chaine de caractères en un numerique
exemple :

0000102031 en 1020.31


Salutations.
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2007, 13h26   #2
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Bonjour.

Bash est très pauvre dès qu'il s'agit de faire des opérations mathématiques sur des réels. Il faut faire appel à la librairie bc.

Code :
echo 'scale=2; 0000102031 / 100' | bc
en hsh, qui supporte l'arithmétique des nombres flottants, c'est plus simple:

Code :
printf '%.2f' $((0000102031/100))
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 13h00   #3
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut conversion d'une chaine de caractères en numerique

Bonjour,

Le truc est que dans mon script, je récupère des informations avec :

Code :
 grep "^[0].*R *$" final_file  | awk  ' { print "001,"substr($0,200,10)",,"substr($0/100,156,13)"."substr($0,169,2)
où le fichier final_file contient des lignes de la forme :

Citation:
0000010607100100634030010066338 xxxxx xxxxx xxxxxxxxxxxxxxxxxxxxxxx
0000000120203012007061420070522R F BBB BACS 1000003024 001du2204au2105 07ECH1106N FACT9149935
le montant est ce qui est gras et souligné

pourrai je utiliser ce que tu m'as donner pour extraire cette l'information ?

Merci d'avance
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 12h53   #4
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
tu peux utiliser la syntaxe
Code :
${ligne:$position:$longueur}
pour extraire une sous chaîne sans passer par awk.

Code :
1
2
3
$bla=123456789
$echo ${bla:1:3}
234
Attention, c'est en bash.
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 14h20   #5
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut Conversion chaine de caractères en numérique

Bonjour;

Effectivement ceci marche, mais le hic c'est que le nombre de 0 à gauche n'est pas fixe, et je peux pas connaitre la position ou commence le montant.

Salutations.
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2007, 12h55   #6
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Donnes-nous plusieurs lignes typiques et représentatives de toutes les formes possibles. Sinon, on risque de tourner en rond.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2007, 19h16   #7
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut chaine de caractères en numérique

Bonjour,

Ci-joint un echantillon de lignes en question :

0000030607100400142410037951162 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120205042007062620070605R.F.GSM.OTAN°1000015641+001du0805au0706/07ECH2606N.FACT9184832
0000040607100400101415102251141 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000001020042007062620070605R.F.GSM.OTAN°1000045820+001du0805au0706/07ECH2606N.FACT9153642
0000050607102700707010220300101 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000002020272007062620070605R.F.GSM.OTAN°1000542479+001du0805au0706/07ECH2606N.FACT9303488
0000060607100200082820820573567 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120202022007062620070605R.F.GSM.OTAN°1002425015+001du0805au0706/07ECH2606N.FACT9130555
0000070607102100008115000071447 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120203212007062620070605R.F.GSM.OTAN°1002575080+001du0805au0706/07ECH2606N.FACT9142089
0000080607100500111415000013029 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000001020052007062620070605R.F.GSM.OTAN°1004003322+001du0805au0706/07ECH2606N.FACT9233434
0000090607102700707010147400139 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120202272007062620070605R.F.GSM.OTAN°1003089445+001du0805au0706/07ECH2606N.FACT9303489
0000100607102700795010031000104 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120203272007062620070605R.F.GSM.OTAN°1003358048+001du0805au0706/07ECH2606N.FACT9303490
0000110607102700707010283800181 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120201272007062620070605R.F.GSM.OTAN°1003825346+001du0805au0706/07ECH2606N.FACT9303491
0000120607102700707010280100116 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000001020272007062620070605R.F.GSM.OTAN°1008214891+001du0805au0706/07ECH2606N.FACT9079384
0000130607102100007113000012686 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000003020212007062620070605R.F.GSM.OTAN°1010584225+001du0805au0706/07ECH2606N.FACT9219325
0000140607102605301000045450080 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120203262007062620070605R.F.GSM.OTAN°1011543345+001du0805au0706/07ECH2606N.FACT9220305
0000150607102100005115000307404 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000002020212007062620070605R.F.GSM.OTAN°1012019059+001du0805au0706/07ECH2606N.FACT9136190

où ce qui est en gras représente le montant que je veux mettre sous forme numérique.

Salutations.
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 22h58   #8
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Avant d'aller plus loin,
Code :
1
2
0000150607102100005115000307404 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
0000000002020212007062620070605R.F.GSM.OTAN°1012019059+001du0805au0706/07ECH2606N.FACT9136190
est sur une seule ligne ou tu l'as coupée pour ton post?

Code :
0000150607102100005115000307404 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000002020212007062620070605R.F.GSM.OTAN°1012019059+001du0805au0706/07ECH2606N.FACT9136190
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 12h01   #9
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut chaine de caractères en numérique

Bonjour,

Oui le tout est sur une seule ligne.

J'ai utilisé awk avec substr mais le résultat n'est pas ce que je voulais.

Salutations.
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 21h23   #10
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
awk était la bonne piste.

Essaye ceci

Code :
 awk '{ printf "%2.2f\n", substr($3,0,15)/100}' ton-fichier
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 11h15   #11
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut Conversion chaine de caractères en numérique

Bonjour,

En l'executant sur le champ seul ça marche.

J'aimerai bien comment l'inscruter au milieu comme le montre ma commande suivante :

grep "^[0].*R *$" old_file | awk ' { print "001,"substr($0,200,10)",,"ICI",AAA,ITS,TABS,"substr($0,242,12)","substr($0,15
6,13)"."substr($0,169,2) }' >> new_file de tel sorte a avoir comme sortie une ligne du genre :

001,xxxxxxxxxx,,120203.01,20070709,XXX,XXXX,9149935,120203.01

où ce qui est en rouge la formule que tu m'as donné.

Merci d'avance.
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2007, 14h52   #12
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Si ton "old_file" est celui dont tu as donné un extrait plus haut, pas besoin de filtrer avec grep. De plus on peut filtrer avec awk si nécessaire.

S'il s'agit d'un tout autre fichier, donne-nous un extrait explicite pour voir.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 12h33   #13
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut chaine de caractères en numérique

l'extrait donné n'est pas celui de mon old_file.

j'ai pu le faire mais le résultat n'est pas sur une seul ligne comme je le voulais.

j'ai utiliser cette ligne de commande :
Code :
1
2
 
grep "^[0].*R *$" input_file  | awk ' { printf "%s" "001,"substr($0,200,10)",," ; printf "%2.2f", substr($0,156,15)/100 ; print ",AAA,BBB,CCCC,"substr($0,242,12)"," ; printf "%2.2f\n", substr($0,156,15)/100 }'  >> output_file.
j'ai lancer cette combinaison sur des lignes du genre transmi ultérieurement.
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 14h09   #14
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Tant que tu ne donnes pas d'extrait représentatif de ton old-file et du format de sortie souhaité, on ne va pas pouvoir t'aider beaucoup.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 15h26   #15
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut chaine de caractères en numérique

je peux te donner ya aucun problème :

0000010607100100634030010066338 XXXXX XXXXX 36 RUE XXXXXXXXXXXXXXXX
0000000120203012007061420070522R F XXX XXXX 1000003024 001du2204au2105 07ECH1106N FACT9149935
R
0000020607100100617030010071941 XXXXXXXXXX XXXXXX 4 RUE XXXXXXXXXXXXXXXXXXX
0000000003020012007061420070522R F GSM OTAN 1000012664 001du2204au2105 07ECH1106N FACT9184652
R
0000060607100200082820820573567 XXXXXXXX XXXXXX AVENUE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
DES 0000000120202022007061420070522R F GSM OTAN 1002425015 001du2204au2105 07ECH1106N FACT9130555
202
0000260607100200082820826078220 XXXX XXXXXXXX XXXXXXXXXXXXXX
0000000120002022007061420070522R F GSM OTAN 1004000012 001du2204au2105 07ECH1106N FACT9290703
002
0000270607100200012120325768947 XXXXXX XXXXXX 294 Bd XXXXXXXXXXXXXXX
0000000002020022007061420070522R F GSM OTAN 1004482779 001du2204au2105 07ECH1106N FACT9290712
R

J'espère que cela vous aidera.

Merci d'avance.
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 15h46   #16
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
OK, ton fichier d'entrée ressemble à ce qu tu as donné plus haut. Tu cherches à traiter les seules lignes contenant [0-9]*R mais que veux-tu comme format de sortie. Les mêmes lignes avec le champ numérique reformaté? Le seul champ reformaté? Donne un exemple.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 16h12   #17
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut chaine de caractères en numérique

j'ai donner un exemple plus haut je crois, et j'ai mis en gras le format de la donnée que je veux avoir.

Merci.
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 16h32   #18
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Ce que tu as mis en gras plus haut est le format du fichier d'entrée non?

Si je devine bien ce que tu veux, c'est transformer:
Citation:
0000030607100400142410037951162 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120205042007062620070605R.F.GSM.OTAN°1000015641+001du0805au0706/07ECH2606N.FACT9184832
en

Citation:
0000030607100400142410037951162 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 120205.042007062620070605R.F.GSM.OTAN°1000015641+001du0805au0706/07ECH2606N.FACT9184832
C'est ça?
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 16h45   #19
Membre à l'essai
 
Inscription : mai 2004
Messages : 148
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 148
Points : 24
Points : 24
Par défaut chaine de caractères en numérique

oui vous m'avez compris, seulement la ligne en sortie est de la forme :


001,xxxxxxxxxx,,120205.04,20070709,XXX,XXXX,9149935,120205.04
arezki76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2007, 17h25   #20
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
Bon,

1- si tu remplaces ton exemple de sortie par des x, on ne vois pas quel champs tu veux récupérer.

2- tes champs du fichiers d'entrée sont-il de longueur fixe? J'ai cru voir que tes séparateur de champs (fichier entrée) ne sont pas uniformes. L'adresse comporte aussi des espaces qui pourraient être confondus avec les séparateurs.

3- quel champ date veux-tu récupérer (il y en a 4 à première vue)

Bref, modélise ta question avec un exemple bidon mais représentatif (sans xxx!) sinon, on a pas fini de tourner en rond! Mets-toi à la place des membres de ce forum qui n'ont jamais vu tes fichiers ni peuvent deviner à quoi doit ressembler la sortie.
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h49.


 
 
 
 
Partenaires

Hébergement Web