Le 08/12/2017 à 14:11, anne.guilde@??? a écrit :
>
> # awk -F : ' /^BEGIN|^ |^;|^=|^END|^VERSION|^$|^\s*$/ {next} 1 {print $1
> ; next} ' <Contacts_Anne-1.vcf | sort | uniq -c >entree_vcard1
>
> 7
>
> 35 ADR;HOME
> 3 ADR;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE
> 10 ADR;HOME;ENCODING=QUOTED-PRINTABLE
> 16 ADR;WORK
> 2 ADR;X-PREF
> 1 ADR;X-PREF;ENCODING=QUOTED-PRINTABLE
> 41 BDAY
> 2 EMAIL;HOME
> 1 EMAIL;PREF
> 3 EMAIL;WORK
> 228 EMAIL;X-Internet
> 441 FN
> 441 N
> 13 NOTE
> 3 NOTE;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE
> 25 NOTE;ENCODING=QUOTED-PRINTABLE
> 126 ORG
> 1 ORG;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE
> 7 PHOTO;ENCODING=BASE64;JPEG
> 3 TEL;CAR
> 256 TEL;CELL
> 120 TEL;HOME
> 5 TEL;VOICE
> 127 TEL;WORK
> 6 TEL;WORK;FAX
> 5 TITLE
> 2 URL
> 6 X-ANDROID-CUSTOM
>
> C'est déjà mieux
Oui mais à force de bidouiller je me retrouve avec des entrées en double
dans les contacts.
Au départ j'avais des contacts avec le même nom dans mon téléphone portable.
BEGIN:VCARD
VERSION:2.1
N:nom1;prenom1;;;
FN:prenom1 nom1
TEL;X-HomeVoice:+33301020304
TEL;X-CellularVoice:+33601020304
END:VCARD
BEGIN:VCARD
VERSION:2.1
N:nom1;prenom1;;;
FN:prenom1 nom1
TEL;CELL:+33601020305
TEL;HOME;PREF:+33301020304
END:VCARD
J'ai modifié avec pluma (éditeur de texte de mate) le fichier vcf
(VCARD) pour modifier TEL;X-HomeVoice en TEL;HOME... et plein d'autres
entrées.
J'ai importé le fichier vcf de ma debian dans le téléphone portable.
Je ne sais pas ce qui c'est passé quand j'ai rapatrié le fichier dans le
téléphone...
BEGIN:VCARD
VERSION:2.1
N:nom1;prenom1;;;
FN:prenom1 nom1
TEL;HOME:+33301020304
TEL;CELL:+33601020304
TEL;CELL:+33601020305
END:VCARD
Je n'ai plus qu'un contact avec prenom1 nom1 mais j'ai plusieurs entées
avec TEL;CELL
Il fallait que je trouve les contacts qui avaient des entées identiques.
J'ai pondu un programme bash pour cela
----
#!/bin/bash
# set -x
fichier1='Contacts_orig.vcf'
fichier='Contacts_modif.vcf'
# Chaque ligne de fichier1 a cette forme :
# texte1:texte2\r
# \r = retour chariot
# Si la ligne n'est pas de la forme texte1:texte2\r, c'est l'encodage
d'une photo
# j'enlève le retour chariot de chaque ligne du fichier en créant un
nouveau fichier
`tr -d '\r' < $fichier1 > $fichier `
declare -a tableau
debut='- '
debut1='Z '
while read line
do
# Chaque ligne de fichier est de la forme texte1:texte2
debut_lig=`echo $line | cut -d':' -f 1`
fin_lig=`echo $line | cut -d':' -f 2`
# BEGIN = dernière linge du contact
# Je crée le premier poste du tableau avec la variable $debut
if [[ $debut_lig = "BEGIN" ]] ; then
index=0
tableau=("${tableau[@]}" "$debut")
let index++
fi
# END = dernière ligne du contact
if [[ $debut_lig = "END" ]] ; then
echo ${tableau[@]}
unset tableau
fi
# Analyse les lignes entre BEGIN et END
if [[ $debut_lig != "BEGIN" ]] && [[ $debut_lig != "END" ]] ; then
# je récupère que les lignes de la forme texte1:texte2
if [[ ${line} == *":"* ]] ; then
taille_tab="$index"
poste=0
while (($poste < $taille_tab))
do
# Si la valeur existe c'est qu'il y a plusieurs entrées avec le même nom
# par exemple Z VERSION N nom_contact;prenom_contact;;; FN TEL;HOME
TEL;CELL TEL;CELL TEL
# j'ai plusieurs TEL;CELL dans le tableau : je mets un Z dans le premier
poste du tableau pour repérage
if [[ "${tableau[$poste]}" == "$debut_lig" ]] ; then
tableau[0]="$debut1"
fi
let poste++
done
# Ajout de l'entrée dans le tableau
tableau=("${tableau[@]}" "$debut_lig")
let index++
# Si l'entrée = N, c'est le nom du contact. J'ajoute le nom au tableau
pour pouvoir modifier dans le téléphone portable
if [[ $debut_lig = "N" ]] ; then
tableau=("${tableau[@]}" "$fin_lig")
let index++
fi
fi
fi
done < $fichier
----
Maintenant je connais les contacts à modifier avant de les réimporter du
téléphone portable dans le pc
Anne