J'ai un fichier CSV de 40 Mo avec 50 000 enregistrements. C'est une liste de produits géants. Chaque rangée a près de 20 champs. [Article #, UPC, DESC, etc.] P>
Comment puis-je, P>
a) Trouvez et imprimez des lignes en double. [Ce fichier est un grand fichier ajouté. J'ai donc plusieurs en-têtes inclus dans le fichier que je dois supprimer, de sorte que je voulais connaître des lignes exactes qui sont en double en premier.] P>
B) Trouvez et imprimez des lignes en double en fonction de la colonne. [Voir si une UPC est affectée à plusieurs produits] P>
J'ai besoin d'exécuter la commande ou le script sur le serveur et j'ai installé Perl et Python. Même Bash Script ou Command fonctionnera aussi pour moi. P>
Je n'ai pas besoin de préserver l'ordre des rangées. etc p>
J'ai essayé, p>
trier grandfile.csv | UNIQ -D P> blockQuote>
Pour obtenir les duplicats, mais je ne reçois pas la réponse attendue. p>
Idéalement, j'aimerais Bash Script ou commander, mais si quelqu'un a une autre suggestion, ce serait trop grand aussi. P>
merci p>
voir: Supprimer des lignes en double d'un gros fichier en python sur le débordement de pile p>
5 Réponses :
Vous pouvez éventuellement utiliser SQLITE Shell pour importer votre fichier CSV et créer des index pour effectuer des commandes SQL plus rapidement. P>
Recherchez et imprimez des lignes en double en Perl:
perl -F/,/ -ane 'print if $SEEN{$F[4]}++' < input-file
Il convient de noter que ce dernier fonctionne si et uniquement si les données CSV ne contiennent jamais de séparateur cité 1,2, "3,3", 4 code>.
@MOB: Il semble que, pour tout groupe de lignes en double, la dernière ligne n'est pas imprimée avec cet exemple.
Pour la deuxième partie: lisez le fichier avec du texte :: CSV dans un hachage à clé de votre (s) clé (s) unique (s), vérifiez si une valeur existe pour le hachage avant de l'ajouter. Quelque chose comme ceci:
données (à ne pas nécessiter de trier), dans cet exemple, nous avons besoin que les deux premières colonnes soient uniques: p> code: p> qui imprime quelque chose comme ceci: p>
Essayez ce qui suit:
# Sort before using the uniq command sort largefile.csv | sort | uniq -d
Vous avez deux fois genre.
J'ai également essayé la version Perl ici et est plus rapide que celle-ci, du moins à Ubuntu Shell sur Windows 10. Mais les deux travaillent bien
Ici mon script (très simple) pour le faire avec Ruby & Rake Gem.
Créez d'abord A RakeFile EM> et écrivez ce code: P> $ rake csv:double["2017.04.07-Export.csv",1]
File contains duplicates
Pourquoi n'est-il pas
UNIQ -D code> vous donnant la réponse attendue?
Vous devez afficher des données d'échantillon (désinfectées si nécessaire), y compris ce que vous considérez comme des duplicats et des non-duplicats. Spécifiquement, si le premier champ (article n °) est différent, mais le deuxième champ (UPC) est identique ou si l'enregistrement entier est le même, etc. Vous devez également être plus précis sur ce que "je ne reçois pas la réponse attendue " moyens.
UniQ code> ne regarde que toute la ligne, à moins que vous ne le disiez de sauter une partie de la ligne (mais cela n'utilise pas de virgules comme séparateurs de champs). De plus, les fichiers CSV peuvent être difficiles à traiter à moins que vous utilisiez des outils effectués à cet effet (par exemple, Python Lib).