#1 Le 12/06/2012, à 14:31
- HacKurx
[résolu] Besoin d'aide pour manipuler du texte
Bonjour à tous, Oh grand développeur ou meilleur ami de bourne shell
J'ai besoin de convertir un fichier en .csv exploitable, j'ai préalablement réussi à tout faire mais je reste bloquer un point.
Actuellement mon .csv exploitable ressemble à ceci :
bob,
leponge,
bobleponge@delocean,
bob2,
leponge,
bob2leponge@delocean,
Mais il me faut obtenir ce résultat final :
bob,leponge,bobleponge@delocean,
bob2,leponge,bob2leponge@delocean,
Quelqu'un peut me venir en aide s'il vous plait? Car je bloque un peu, merci d'avance.
Dernière modification par HacKurx (Le 12/06/2012, à 14:50)
Follow Me: http://hackurx.wordpress.com
Hors ligne
#2 Le 12/06/2012, à 14:44
- credenhill
Re : [résolu] Besoin d'aide pour manipuler du texte
hello
$ awk '{printf $0} /@/ {print ""}' fichier.csv
bob,leponge,bobleponge@delocean,
bob2,leponge,bob2leponge@delocean,
$
Hors ligne
#3 Le 12/06/2012, à 14:49
- HacKurx
Re : [résolu] Besoin d'aide pour manipuler du texte
Yes merci beaucoup
Follow Me: http://hackurx.wordpress.com
Hors ligne
#4 Le 12/06/2012, à 21:20
- hayou
Re : [résolu] Besoin d'aide pour manipuler du texte
j'aurai besoin d'un café ... personne ?
Hors ligne
#5 Le 13/06/2012, à 07:39
- credenhill
Re : [résolu] Besoin d'aide pour manipuler du texte
voila
on peut simplifier
$ awk '/@/ {$0=$0 "\n"} {printf $0}' fichier.csv
bob,leponge,bobleponge@delocean,
bob2,leponge,bob2leponge@delocean,
$
Dernière modification par credenhill (Le 13/06/2012, à 07:43)
Hors ligne
#6 Le 13/06/2012, à 09:24
- HacKurx
Re : [résolu] Besoin d'aide pour manipuler du texte
Ok merci, mon script fonctionne bien mais je rencontre juste un dernière problème avec certaine conversion ^^
En effet lorsque la ligne "InternetAddress: " est vide et ne comporte pas d'arobase mon export est faussé.
Je dois donc créer une condition de sorte que si la ligne ne comporte pas d'arobase alors on lui ajoute "aucune@adresse".
Je penche sur un "sed 's/InternetAddress: /InternetAddress: aucune@adresse/g'" en plus abouti.
Dernière modification par HacKurx (Le 13/06/2012, à 09:33)
Follow Me: http://hackurx.wordpress.com
Hors ligne
#7 Le 13/06/2012, à 09:32
- credenhill
Re : [résolu] Besoin d'aide pour manipuler du texte
montre un exemple de fichier avant et après
Hors ligne
#8 Le 13/06/2012, à 09:39
- HacKurx
Re : [résolu] Besoin d'aide pour manipuler du texte
Si sur la ligne InternetAdress on a une adresse mail de renseignée
InternetAddress: bobleponge@delocean
Alors on ne touche pas à la ligne.
Si par contre on a pas d'adresse mail sur la ligne
InternetAddress:
Alors on lui rajoute une adresse e-mail bidon afin d'obtenir ceci:
InternetAddress: aucune@adresse
Follow Me: http://hackurx.wordpress.com
Hors ligne
#9 Le 13/06/2012, à 09:42
- HacKurx
Re : [résolu] Besoin d'aide pour manipuler du texte
Le fichier que je dois modifier ressemble à ceci pour chaque contact :
PhoneLabel_1: Téléphone professionnel
PhoneLabel_3: Fax professionnel
PhoneLabel_5: Téléphone portable
PhoneLabel_2: Téléphone personnel
PhoneLabel_4: Fax personnel
PhoneLabel_6: Radiomessagerie
OfficeStreetAddress:
OfficeCity:
OfficeState:
StreetAddress:
City:
State:
AreaCodeFromLoc:
FirstName: bob
OfficePhoneNumber:
MiddleInitial:
OfficeFAXPhoneNumber:
LastName: eponge
CellPhoneNumber:
Title:
Suffix:
PhoneNumber:
AltFullName:
AltFullNameLanguage:
HomeFAXPhoneNumber:
PhoneNumber_6:
CompanyName: test
MailAddress: bob@eponge
JobTitle:
WebSite:
BusinessAddress:
HomeAddress:
OfficeZIP:
Zip:
OfficeCountry:
country:
Location:
Spouse:
Department:
Children:
Manager:
Assistant:
Birthday:
FullName: bob eponge
Categories:
MailDomain:
MailSystem:
Logo:
ShortName:
AltFullNameSort:
NameDisplayPref: 1
Certificate:
PublicKey:
Type: Person
DocumentAccess: [UserModifier]
InternetAddress: test@test.fr
$UpdatedBy: CN=bob eponge/O=test
$Revisions: 14/04/2010 17:00:03,14/04/2010 17:00:04,14/04/2010 17:00:21
Je pense que pour éviter toute erreur sur l'import de chaque contact il faudrait plus utiliser la ligne $Revisions.
Dernière modification par HacKurx (Le 13/06/2012, à 09:45)
Follow Me: http://hackurx.wordpress.com
Hors ligne
#10 Le 13/06/2012, à 09:47
- HacKurx
Re : [résolu] Besoin d'aide pour manipuler du texte
Pour faire plus simple voici mon script :
#!/bin/sh
# Structure du CSV zimbra: http://wiki.zimbra.com/wiki/Import_and_Export_of_Contacts
# Utilisation: ./domino2zimbra.sh test_export_carnet
# Convertion du fichier source en utf-8
iconv -f ISO-8859-1 -t utf-8 $1 > /tmp/export.txt
# Récupération des champs intéressant
cat /tmp/export.txt | egrep -a -e "FirstName|OfficePhoneNumber|OfficeFAXPhoneNumber|LastName|CellPhoneNumber|CompanyName|JobTitle|InternetAddress" | cut -d ' ' -f 3- > /tmp/export.csv
# Remplacement des retour chariot windows ^M (soit \r avec sed) par une virgule.
sed -i s/\\r/,/g /tmp/export.csv
# Mise en forme des champs pour respecter la structures .csv d'importation
awk '{printf $0} /@/ {print ""}' /tmp/export.csv > /tmp/import-contact-zimbra.csv
# Ajout de la 1ere ligne de fichier pour définir les colones
sed -i '1i"FirstName","workPhone","workFax","LastName","mobilePhone","company","jobTitle","email",' /tmp/import-contact-zimbra.csv
# Message de fin
echo "Votre fichier /tmp/import-contact-zimbra.csv est prêt pour l'importation dans Zimbra."
exit 0
Follow Me: http://hackurx.wordpress.com
Hors ligne
#11 Le 13/06/2012, à 09:50
- credenhill
Re : [résolu] Besoin d'aide pour manipuler du texte
$ cat a44
InternetAddress: bobleponge@delocean
InternetAddress:
$
$ awk '/^InternetAd/ {if(NF<2)$2="aucune@adresse" ; print $2}' a44
bobleponge@delocean
aucune@adresse
$
Hors ligne
#12 Le 13/06/2012, à 10:06
- HacKurx
Re : [résolu] Besoin d'aide pour manipuler du texte
Hélas cela ne fonctionne pas je viens de voir que certain contact non pas la ligne "InternetAddress" et que de plus la ligne parfois ne se trouve pas à la fin d'un contact
C'est un veux serveur domino, et je me retrouve avec des .csv parfois différent...
Dernière modification par HacKurx (Le 13/06/2012, à 10:09)
Follow Me: http://hackurx.wordpress.com
Hors ligne
#13 Le 13/06/2012, à 10:21
- HacKurx
Re : [résolu] Besoin d'aide pour manipuler du texte
J'ai trouvé une solution alternative, je récupère juste les adresses email si le .csv m'embête de trop. En tout cas encore merci Credenhill.
Follow Me: http://hackurx.wordpress.com
Hors ligne
#14 Le 14/06/2012, à 03:49
- nesthib
Re : [résolu] Besoin d'aide pour manipuler du texte
En réponse à la première question, si ton fichier csv est régulier, voici une solution dans le même genre que celle de credenhill, mais se basant sur le numéro de ligne plutôt que sur un motif de la ligne :
awk '{printf($0(NR%3 ? "" : "\n"))}' fichier
NB. quelques remarques en vrac :
cat … | grep … | cut … > …
peut avantageusement être remplacé par
sed -i -n '/FirstName\|OfficePhoneNumber\|OfficeFAXPhoneNumber\|LastName\|CellPhoneNumber\|CompanyName\|JobTitle\|InternetAddress/s/[^:]*: *//p' fichier
(avec l'option -i le fichier est modifié sur place)
Si ton fichier est un ensemble de blocs tels que décrits dans le message #9 tu peux utiliser la commande suivante :
awk '(/FirstName|OfficePhoneNumber|OfficeFAXPhoneNumber|LastName|CellPhoneNumber|CompanyName|JobTitle|InternetAddress/) {printf $2", "} ; (/\$Revisions/) { printf "\n"}'
Si ton fichier comporte des exceptions, comme un champ présent aléatoirement ou les paramètres dans un ordre variable, je te suggère de créer un script plus complet qui lit ligne à ligne le fichier et assigne chaque information trouvée à une variable puis compile le résultat à chaque fin de bloc.
en pseudocode :
on lit une ligne
si la ligne comporte le mot clé "FirstName" on enregistre l'information qui suit dans la variable firstname
sinon, si la ligne comporte le mot clé…
sinon, si…
si on arrive en fin d'un bloc (motif "$Revisions") on compile les informations obtenues (les variables non assignées doivent retourner une chaîne vide)
${firstname}, ${officephonenumber}, ${…}, …\n
on recommence tant qu'il reste des lignes
Tu peux faire ça en bash ou dans un langage un peu plus convivial comme le python.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#15 Le 14/06/2012, à 12:59
- HacKurx
Re : [résolu] Besoin d'aide pour manipuler du texte
Ok merci
Follow Me: http://hackurx.wordpress.com
Hors ligne