Rajout d'un préfixe sur numéro de téléphone [Résolu]

Signaler
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020
-
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
4 935
$ 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';
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
4 935
BEGIN {FS=OFS=";"} dans l'exemple, les champs sont séparés par ;
montre une ligne
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
4 935
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
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 2020

Super dubcek !! ça fonctionne bien maintenant
Merci encore une fois pour ton aide.
Messages postés
35335
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 août 2020
5 319
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
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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
35335
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 août 2020
5 319 >
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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
35335
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
5 août 2020
5 319 >
Messages postés
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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
18187
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
31 juillet 2020
4 935
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
109
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
22 janvier 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 ;-)