Supprimer les décimales sur un champs numérique dans une ligne

Résolu/Fermé
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 26 août 2013 à 11:35
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 26 août 2013 à 14:34
Bonjour,

J'ai le fichier suivant et j'aimerai enlever les décimales sur un champ bien précis mais que sur certaine ligne à savoir les ligne avec le "SALBASE":

fichier :
00100290;20130101;COTIPAT2;1296.86;R
00100290;20130101;HMENS;151.67;R
00100290;20130101;SALBRUT;2866.78;R
00100290;20130101;SALNET;2199.54;R
00100290;20130101;PRIMANN;0.00;R
00100290;20130101;PRIMMENS;369.87;R
00100290;20130101;SALBASE;2249.00;R
00100290;20130101;COTIPAT;1396.05;R
00100290;20130101;PRIMANC;247.91;R
04000303;20130101;COTIPAT2;1368.45;R
04000303;20130101;HMENS;151.67;R
04000303;20130101;SALBRUT;3025.00;R
04000303;20130101;SALNET;2320.91;R
04000303;20130101;PRIMANN;0.00;R
04000303;20130101;PRIMMENS;0.00;R
04000303;20130101;SALBASE;2750.00;R
04000303;20130101;COTIPAT;1473.11;R
04000303;20130101;PRIMANC;275.00;R
00004027;20130101;COTIPAT2;1161.78;R
00004027;20130101;HMENS;151.67;R
00004027;20130101;SALBRUT;2568.16;R
00004027;20130101;SALNET;1970.42;R
00004027;20130101;PRIMANN;0.00;R
00004027;20130101;PRIMMENS;320.77;R
00004027;20130101;SALBASE;2027.00;R
00004027;20130101;COTIPAT;1250.64;R
00004027;20130101;PRIMANC;220.39;R

Resultat souhaité :

00100290;20130101;COTIPAT2;1296.86;R
00100290;20130101;HMENS;151.67;R
00100290;20130101;SALBRUT;2866.78;R
00100290;20130101;SALNET;2199.54;R
00100290;20130101;PRIMANN;0.00;R
00100290;20130101;PRIMMENS;369.87;R
00100290;20130101;SALBASE;2249;R
00100290;20130101;COTIPAT;1396.05;R
00100290;20130101;PRIMANC;247.91;R
04000303;20130101;COTIPAT2;1368.45;R
04000303;20130101;HMENS;151.67;R
04000303;20130101;SALBRUT;3025.00;R
04000303;20130101;SALNET;2320.91;R
04000303;20130101;PRIMANN;0.00;R
04000303;20130101;PRIMMENS;0.00;R
04000303;20130101;SALBASE;2750;R
04000303;20130101;COTIPAT;1473.11;R
04000303;20130101;PRIMANC;275.00;R
00004027;20130101;COTIPAT2;1161.78;R
00004027;20130101;HMENS;151.67;R
00004027;20130101;SALBRUT;2568.16;R
00004027;20130101;SALNET;1970.42;R
00004027;20130101;PRIMANN;0.00;R
00004027;20130101;PRIMMENS;320.77;R
00004027;20130101;SALBASE;2027;R
00004027;20130101;COTIPAT;1250.64;R
00004027;20130101;PRIMANC;220.39;R

Merci d'd'avance pour votre aide ;-)

A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
26 août 2013 à 11:42
Salut,

$ cat plop 
00100290;20130101;COTIPAT2;1296.86;R
00100290;20130101;HMENS;151.67;R
00100290;20130101;SALBRUT;2866.78;R
00100290;20130101;SALNET;2199.54;R
00100290;20130101;PRIMANN;0.00;R
00100290;20130101;PRIMMENS;369.87;R
00100290;20130101;SALBASE;2249.00;R
00100290;20130101;COTIPAT;1396.05;R
00100290;20130101;PRIMANC;247.91;R
04000303;20130101;COTIPAT2;1368.45;R
04000303;20130101;HMENS;151.67;R
04000303;20130101;SALBRUT;3025.00;R
04000303;20130101;SALNET;2320.91;R
04000303;20130101;PRIMANN;0.00;R
04000303;20130101;PRIMMENS;0.00;R
04000303;20130101;SALBASE;2750.00;R
04000303;20130101;COTIPAT;1473.11;R
04000303;20130101;PRIMANC;275.00;R
00004027;20130101;COTIPAT2;1161.78;R
00004027;20130101;HMENS;151.67;R
00004027;20130101;SALBRUT;2568.16;R
00004027;20130101;SALNET;1970.42;R
00004027;20130101;PRIMANN;0.00;R
00004027;20130101;PRIMMENS;320.77;R
00004027;20130101;SALBASE;2027.00;R
00004027;20130101;COTIPAT;1250.64;R
00004027;20130101;PRIMANC;220.39;R 

$ sed '/SALBASE/{s/\.[[:digit:]]\+//}' plop 
00100290;20130101;COTIPAT2;1296.86;R
00100290;20130101;HMENS;151.67;R
00100290;20130101;SALBRUT;2866.78;R
00100290;20130101;SALNET;2199.54;R
00100290;20130101;PRIMANN;0.00;R
00100290;20130101;PRIMMENS;369.87;R
00100290;20130101;SALBASE;2249;R
00100290;20130101;COTIPAT;1396.05;R
00100290;20130101;PRIMANC;247.91;R
04000303;20130101;COTIPAT2;1368.45;R
04000303;20130101;HMENS;151.67;R
04000303;20130101;SALBRUT;3025.00;R
04000303;20130101;SALNET;2320.91;R
04000303;20130101;PRIMANN;0.00;R
04000303;20130101;PRIMMENS;0.00;R
04000303;20130101;SALBASE;2750;R
04000303;20130101;COTIPAT;1473.11;R
04000303;20130101;PRIMANC;275.00;R
00004027;20130101;COTIPAT2;1161.78;R
00004027;20130101;HMENS;151.67;R
00004027;20130101;SALBRUT;2568.16;R
00004027;20130101;SALNET;1970.42;R
00004027;20130101;PRIMANN;0.00;R
00004027;20130101;PRIMMENS;320.77;R
00004027;20130101;SALBASE;2027;R
00004027;20130101;COTIPAT;1250.64;R
00004027;20130101;PRIMANC;220.39;R 


Rajouter l'option "-i.bak" pour un remplacement direct dans le fichier avec une sauvegarde en ".bak" en prime ;-))

sed -i.bak '/SALBASE/{s/\.[[:digit:]]\+//}' plop

0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
26 août 2013 à 12:15
Bonjour,

Merci pour ta réponse.

J'ai testé et j'ai ce message d'erreur :

sed: Function /SALBASE/{s/\.[[:digit:]]\+//} cannot be parsed.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
26 août 2013 à 12:27
Quel environnement ?
Quelle version de sed ?

Sinon, essaye avec awk :

awk  'BEGIN {FS=OFS=";"} $3 ~ /SALBASE/{sub(/\.[[:digit:]]*/,"",$4)};{ print}'
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
26 août 2013 à 14:17
le awk à l'air de fonctionné mais je ne vois pas comment l'intégrer pour qu'il modifie directement mon fichier de sortie ?

en gros avec ta commande ou je mets le nom du fichier à modifier ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
26 août 2013 à 14:18
awk  'BEGIN {FS=OFS=";"} $3 ~ /SALBASE/{sub(/\.[[:digit:]]*/,"",$4)};{ print}' fichier_entrée > fichier_sortie
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
26 août 2013 à 14:06
Voici pour le système :

uname -a => AIX u203esg2 3 5 000EC30AD400
echo $SHELL => /usr/bin/ksh

j'essaie le awk et je te dis.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
Modifié par zipe31 le 26/08/2013 à 14:14
Argh... Aix et son sed minimaliste ;-(

Sinon, essaie comme ça :

sed '/SALBASE/{s/\.[0-9][0-9]*//}' fichir
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
26 août 2013 à 14:32
je crois qu'il aime pas non plus...
/SALBASE/{s/\.[0-9][0-9]*//} cannot be parsed.
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
26 août 2013 à 14:12
avec le sed ZIP31 ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
26 août 2013 à 14:14
Oui.
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
26 août 2013 à 14:34
Bon c'est bon ça fonctionne impec avec le awk ;-)

Merci zipe31
0