Rajout d'un préfixe sur numéro de téléphone

[Résolu/Fermé]
Signaler
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020
-
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020
-
Bonjour,

Je souhaiterai par un post-traitement pouvoir rajouter l'indicatif français à des numéros de téléphone.
j'ai un fichier plat du genre :

AAAAA;BBBBBB;CCCCCC;0601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;0601155204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;00268601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+268601030204;DDDDD;EEEEE

Et je souhaite avoir cela :

AAAAA;BBBBBB;CCCCCC;+33601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+33601155204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;00268601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+268601030204;DDDDD;EEEEE

Donc pas de substitution si un indicatif est déjà présent sur le numéro ( numéro commençant par "00" ou "+") sinon on remplace le premier zéro par "+33".
J'ai déjà un script de post-traitement (suppression des espaces non significatifs via un sed)

Merci pour votre aide car je ne maîtrise vraiment pas le sujet.

Configuration: Windows / Chrome 76.0.3809.132

3 réponses

Messages postés
18267
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2021
5 376
$ awk 'BEGIN {FS=OFS=";"} $18 !~ /^'\''(+|00)/ {sub("0", "+33", $18)} {print $0}'  fichier2
'0449003021';'00000162';'00000162';'BOBO';;'TOTO';'bobo.toto@free.fr';;;'1970-01-20';'06 RUE ALMODIS';;;'02880';'SOISSONS';'FR';;'+33657087624';;;;;'FR';'2005-08-28';;;;;;;;;;;;;;;;;;'ATE';'078';'DERTIS AERO';'078021';'DERTIS AERO. BLAG';'NON CADRE';
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

Bonjour,

En effet, j'avais posté dans un premier temps un exemple simple pour ensuite reporté et adapter la solution à mes véritables données (ligne présent dans le post de la meilleurs solution ci-dessus).

Tout mes champs sont entre ' ' et certain peuvent commencer par des zéros.

Le fait d'avoir appliqué cela sur le champs $18 pose problème ?

Merci.
Messages postés
18267
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2021
5 376
BEGIN {FS=OFS=";"} dans l'exemple, les champs sont séparés par ;
montre une ligne
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

C'est bien cela :

'0449003021';'00000162';'00000162';'BOBO';;'TOTO';'bobo.toto@free.fr';;;'1970-01-20';'06 RUE ALMODIS';;;'02880';'SOISSONS';'FR';;'+33657087624';;;;;'FR';'2005-08-28';;;;;;;;;;;;;;;;;;'ATE';'078';'DERTIS AERO';'078021';'DERTIS AERO. BLAG';'NON CADRE';
Messages postés
18267
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2021
5 376
essayer
awk 'BEGIN {FS=OFS=";"} $18 !~ /^\x27(+|00)/ {sub("0", "+33", $18)} {print $0}' Fic1 > Fic2 

$18 !~ /^\x27(+|00)/ \x27 c'est '
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

Super dubcek !! ça fonctionne bien maintenant
Merci encore une fois pour ton aide.
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 382
Salut,

Sous réserve qu'il n'existe aucun autre champs commençant par un zéro suivi d'un chiffre entre 1 et 9…

sed 's/;0\([1-9]\)/;+33\1/' 
devrait le faire ;-)

Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

Ok super Zip31, merci pour ton aide. Je vais regarder la solution de dubcek dans ce cas si sa solution est plus sur.
Merci encore ;-)
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 382 >
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

Re-

Si tu tiens absolument à le faire via "sed", voici une solution plus qu'indigeste ;-))

sed "s/\(\([^;]*;\)\{15\}\)'0\([1-9][0-9]\{8\}\)/\1'+33\3/"
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

Bonjour Zipe31,

Je vais essayer car en même temps tant que ça fonctionne moi ça me va ;-)
les côtes ne pause pas de problèmes dans ton code ?

Merci encore.
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 382 >
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

les côtes ne pause pas de problèmes dans ton code ?
Non, dans la mesure où on emploie des "quotes doubles" autour de la commande principale.
C'est d'ailleurs pourquoi je les ai employées ici, afin d'éviter les soucis causés par les échappements avec des antislashs ;-\
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

ok, bha au moins j'aurai appris cela !!
Dans tous les cas, les deux solutions fonctionnent donc encore une fois, je vous remercie tous pour votre aide et votre disponibilité.

Merci !!!
Messages postés
18267
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 septembre 2021
5 376
hello
$ awk 'BEGIN {FS=OFS=";"} $4 !~ /^(+|00)/ {sub("0", "+33", $4)} {print $0}'  fichier
AAAAA;BBBBBB;CCCCCC;+33601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+33601155204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;00268601030204;DDDDD;EEEEE
AAAAA;BBBBBB;CCCCCC;+268601030204;DDDDD;EEEEE
Messages postés
112
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
17 novembre 2020

Merci Dubcek,

Merci pour ta solution, comme dit plus haut la réponse de Zip31 me convient mieux car plus facile à rajouter dans mon script mais en fonction de la réponse de Zip31 j'utiliserai quand même ta solution si besoin.

Merci dans tout les cas ;-)