2010-09-27 15 views
2

J'ai un fichier CSV contenant 500 membres avec leurs numéros de téléphone. J'ai essayé des outils de diff mais aucun ne peut sembler trouver des doublons. Est-ce que je peux utiliser regex pour trouver des lignes dupliquées par les numéros de téléphone des membres? J'utilise Textmate sur Mac.Recherche de doublons (Regex)

Un grand merci

+0

Pouvez-vous utiliser regex? Probablement. Devriez-vous utiliser regex? Sûrement pas. – NullUserException

Répondre

4

Quels sont les doublons que vous recherchez? Les lignes entières ou juste le même numéro de téléphone?

Si elle est la ligne, essayez ceci:

sort phonelist.txt | uniq -c | sort -n 

et vous verrez en bas toutes les lignes, qui se produisent plus d'une fois.

S'il est juste le numéro de téléphone dans une colonne, utilisez ceci:

awk -F ';' '{print $4}' phonelist.txt | uniq -c | sort -n 

remplacer le « 4 » avec le numéro de la colonne avec le numéro de téléphone et le « ; » avec le vrai séparateur que vous utilisez dans votre fichier.

Ou donnez-nous quelques exemples de lignes de ce fichier.

EDIT:

Si le format de données est: name,mobile,phone,uniqueid,group, puis utilisez les éléments suivants:

awk -F ',' '{print $3}' phonelist.txt | uniq -c | sort -n 

dans la ligne de commande.

+0

Erm .. dans quelle langue est-ce? – 3zzy

+0

Les lignes sont dans ce format: 'nom, mobile, téléphone, uniqueid, groupe' – 3zzy

+0

Parfait, merci beaucoup! :) – 3zzy

0

Vous pouvez normalement analyser ce fichier, et vérifier que les lignes sont dupliquées. Je pense que RAGEX est une pire solution pour ce problème.

+0

Je peux penser à des solutions plus mauvaises –

0

Quelle langue utilisez-vous? Dans .NET, avec peu d'efforts, vous pouvez charger le fichier CSV dans un DataTable et rechercher/supprimer les lignes en double. Ensuite, réécrivez votre DataTable dans un autre fichier CSV.

Heck, vous pouvez charger ce fichier dans Excel et trier par un champ et trouver les doublons manuellement. 500 n'est pas si nombreux.

2

Oui. Pour une façon de le faire, regardez here. Mais vous ne voudriez probablement pas le faire de cette façon.

+0

Déjà regardé là, ce '(? <=, | ^) ([^,] *) (, \ 1) + (? =, | $)' Ne fait que correspondre aux virgules dans un fichier CSV délimité par des virgules. – 3zzy

0

utilisez PERL.

Chargez le fichier CSV dans un tableau, et correspondre à la colonne que vous souhaitez vérifier (numéros de téléphone) pour les doublons, puis stocker les valeurs dans un autre tableau, puis vérifier les doublons dans ce tableau, en utilisant:

my %seen; 
my @unique = grep !$seen{$_}++, @array2; 

Après cela, tout ce que vous devez faire est de charger le tableau unique (numéros de téléphone) dans une boucle for, et à l'intérieur charger le tableau # 1 (lignes) dans une boucle for. Comparez le numéro de téléphone dans le tableau unique, et s'il correspond, affichez cette ligne dans un autre fichier csv.