Bonjour,
Pourrai je faire la conversion d'une chaine de caractères en un numerique
exemple :
0000102031 en 1020.31
Salutations.
Bonjour,
Pourrai je faire la conversion d'une chaine de caractères en un numerique
exemple :
0000102031 en 1020.31
Salutations.
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.
en hsh, qui supporte l'arithmétique des nombres flottants, c'est plus simple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo 'scale=2; 0000102031 / 100' | bc
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf '%.2f' $((0000102031/100))
Bonjour,
Le truc est que dans mon script, je récupère des informations avec :
où le fichier final_file contient des lignes de la forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part grep "^[0].*R *$" final_file | awk ' { print "001,"substr($0,200,10)",,"substr($0/100,156,13)"."substr($0,169,2)
le montant est ce qui est gras et souligné0000010607100100634030010066338 xxxxx xxxxx xxxxxxxxxxxxxxxxxxxxxxx
0000000120203012007061420070522R F BBB BACS 1000003024 001du2204au2105 07ECH1106N FACT9149935
pourrai je utiliser ce que tu m'as donner pour extraire cette l'information ?
Merci d'avance
tu peux utiliser la syntaxepour extraire une sous chaîne sans passer par awk.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ${ligne:$position:$longueur}
Attention, c'est en bash.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $bla=123456789 $echo ${bla:1:3} 234
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.
Donnes-nous plusieurs lignes typiques et représentatives de toutes les formes possibles. Sinon, on risque de tourner en rond.
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.
Avant d'aller plus loin,
est sur une seule ligne ou tu l'as coupée pour ton post?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 0000150607102100005115000307404 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000002020212007062620070605R.F.GSM.OTAN°1012019059+001du0805au0706/07ECH2606N.FACT9136190
Code : Sélectionner tout - Visualiser dans une fenêtre à part 0000150607102100005115000307404 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000002020212007062620070605R.F.GSM.OTAN°1012019059+001du0805au0706/07ECH2606N.FACT9136190
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.
awk était la bonne piste.
Essaye ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part awk '{ printf "%2.2f\n", substr($3,0,15)/100}' ton-fichier
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.
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.
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 :
j'ai lancer cette combinaison sur des lignes du genre transmi ultérieurement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
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.
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.
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.
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.
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:
en0000030607100400142410037951162 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0000000120205042007062620070605R.F.GSM.OTAN°1000015641+001du0805au0706/07ECH2606N.FACT9184832
C'est ça?0000030607100400142410037951162 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 120205.042007062620070605R.F.GSM.OTAN°1000015641+001du0805au0706/07ECH2606N.FACT9184832
oui vous m'avez compris, seulement la ligne en sortie est de la forme :
001,xxxxxxxxxx,,120205.04,20070709,XXX,XXXX,9149935,120205.04
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager