Supprimer les décimales sur un champs numérique dans une ligne [Résolu/Fermé]

Signaler
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020
-
JsuisNul
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020
-
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 ;-)

4 réponses

Messages postés
38731
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 avril 2020
4 902
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

Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

Bonjour,

Merci pour ta réponse.

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

sed: Function /SALBASE/{s/\.[[:digit:]]\+//} cannot be parsed.
zipe31
Messages postés
38731
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 avril 2020
4 902
Quel environnement ?
Quelle version de sed ?

Sinon, essaye avec awk :

awk  'BEGIN {FS=OFS=";"} $3 ~ /SALBASE/{sub(/\.[[:digit:]]*/,"",$4)};{ print}'
JsuisNul
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

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 ?
zipe31
Messages postés
38731
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 avril 2020
4 902
awk  'BEGIN {FS=OFS=";"} $3 ~ /SALBASE/{sub(/\.[[:digit:]]*/,"",$4)};{ print}' fichier_entrée > fichier_sortie
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

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.
zipe31
Messages postés
38731
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 avril 2020
4 902
Argh... Aix et son sed minimaliste ;-(

Sinon, essaie comme ça :

sed '/SALBASE/{s/\.[0-9][0-9]*//}' fichir
JsuisNul
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

je crois qu'il aime pas non plus...
/SALBASE/{s/\.[0-9][0-9]*//} cannot be parsed.
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

avec le sed ZIP31 ?
zipe31
Messages postés
38731
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 avril 2020
4 902
Oui.
JsuisNul
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

Bon c'est bon ça fonctionne impec avec le awk ;-)

Merci zipe31