Script pour trouver les doublons dans un fichier csv
J'ai un 40 MO fichier csv avec les 50 000 enregistrements. Ses un géant de la fiche produit. Chaque ligne a près de 20 champs. [Item#, UPC, Desc, etc]
Comment puis-je,
a) Trouver et Imprimer des lignes en double. [Ce fichier est un grand fichier annexe, j'ai donc plusieurs en-têtes inclus dans le fichier que j'ai besoin de l'enlever, donc je voulais connaître exactement les lignes qui sont en double.]
b) Trouver et Imprimer des lignes en double basé sur une colonne. [Voir si l'UPC est attribuée à plusieurs produits]
J'ai besoin d'exécuter la commande ou le script sur le serveur et j'ai Perl et Python installé. Même script bash ou commande va fonctionner pour moi aussi.
Je n'ai pas besoin de préserver l'ordre des lignes. etc
J'ai essayé,
sorte largefile.csv | uniq -d
pour obtenir les doublons, Mais je n'obtiens pas la réponse attendue.
Idéalement, j'aimerais que bash script ou une commande, mais si quelqu'un a une autre suggestion, ce serait très bien aussi.
Grâce
Voir: Supprimer les doublons de lignes d'un gros fichier en Python sur un Débordement de Pile
uniq -d
vous donner la réponse attendue?Vous devriez vous montrer quelques exemples de données (désinfectés si nécessaire), y compris ce que vous considérez être des doublons et non des doublons. Plus précisément, si le premier champ (item#) est différent, mais le deuxième champ (UPC) est le même ou si l'ensemble de l'enregistrement est le même, etc. Vous devriez également vous être plus précis sur ce que "je ne suis pas arriver à la réponse attendue".
uniq
ne regarde que l'ensemble de la ligne sauf si vous lui dites ignorer la partie de la ligne (mais il n'utilisez pas de virgules comme séparateurs de champ). Aussi, les fichiers CSV peuvent être difficile à traiter avec, sauf si vous utilisez des outils pour objet (par exemple une lib Python).
OriginalL'auteur | 2010-11-04
Vous devez vous connecter pour publier un commentaire.
Trouver et imprimer des lignes en double dans Perl:
Trouver et imprimer des lignes en double dans des colonnes en Perl -- disons que la 5ème colonne de où les champs sont séparés par des virgules:
1,2,"3,3",4
.Il semble que, pour tout groupe de lignes en double, la dernière ligne n'est pas imprimé avec cet exemple.
OriginalL'auteur mob
Essayez les solutions suivantes:
uniq est très basique, de commande et uniquement les rapports de l'unicité /les doublons qui sont à côté de l'autre.
J'ai édité.
J'ai essayé également perl version ici-bas et est plus rapide que cela, au moins dans ubuntu shell sur windows10. Mais les deux sont très bien fonctionné
OriginalL'auteur Morten
Vous pourriez peut-être utiliser SQLite shell pour importer votre fichier csv et de créer des index pour exécuter des commandes SQL plus rapide.
OriginalL'auteur Benoit
Ici mon (très simple) script pour le faire avec Ruby & Râteau Gem.
D'abord créer un RakeFile et écrire ce code:
Puis de l'utiliser sur la première colonne
Et de l'utiliser sur la seconde (par exemple)
OriginalL'auteur RousseauAlexandre
Pour la deuxième partie: lire le fichier avec Text::CSV dans une table de hachage à clé sur votre clé unique(s), de vérifier si une valeur existe pour le hachage avant de l'ajouter. Quelque chose comme ceci:
de données (n'a pas besoin d'être triés), dans cet exemple, nous avons besoin des deux premières colonnes d'être unique:
code:
Qui imprime quelque chose comme ceci:
OriginalL'auteur MkV