Script um Duplikate zu finden, in einer csv-Datei
Habe ich eine 40 MB csv-Datei mit 50.000 Datensätzen. Seine eine riesige Produkt-listing. Jede Zeile hat knapp 20 Felder. [Item#, UPC, Desc, etc]
Wie kann ich,
a) Finden und Drucken Sie doppelte Zeilen. [Diese Datei ist eine große Datei angehängt, so habe ich mehrere Header in der Datei enthalten, die ich entfernen müssen, daher wollte ich wissen, exakt die Zeilen, die doppelte erste.]
b) Finden und Drucken Sie doppelte Zeilen basierend auf einer Spalte. [Sehen Sie, wenn ein UPC zugeordnet ist, mehrere Produkte]
Muss ich den Befehl ausführen oder Skript auf dem server und ich habe Perl und Python installiert. Auch bash-Skript oder Befehl funktioniert auch bei mir.
Ich keine Notwendigkeit, beibehalten der Reihenfolge der Zeilen. etc
Habe ich versucht,
Art largefile.csv | uniq -d
um die Duplikate, Aber ich bin nicht immer die erwartete Antwort.
Idealerweise würde ich gerne bash-Skript oder ein Befehl, aber wenn einer einen anderen Vorschlag, das wäre großartig.
Dank
Finden Sie unter: Entfernen Sie doppelte Zeilen aus einer großen Datei in Python über auf Stack Overflow
- warum nicht
uniq -d
geben Sie die erwartete Antwort? - Sie sollten zeigen einige Beispiel-Daten (sanitized falls erforderlich), einschließlich, was Sie betrachten, um Duplikate und nicht-Duplikate. Speziell, wenn das erste Feld (item#) ist anders, aber das zweite Feld (UPC) ist das gleiche oder, wenn das ganze Album ist der gleiche, etc. Sie sollten auch konkreter sein, über das, was "ich bin nicht immer die erwartete Antwort" bedeutet.
uniq
sieht nur die ganze Zeile, es sei denn, Sie sagen, es zu überspringen, Teil der Zeile (aber nicht verwenden Sie Kommas als Trennzeichen). Auch CSV-Dateien kann schwierig sein zu behandeln, es sei denn, Sie sind mit tools für den Zweck gemacht wird (z.B. eine Python-lib).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden und drucken Sie doppelte Zeilen in Perl:
Finden und drucken von Zeilen mit doppelten Spalten in Perl-sagen wir die 5. Spalte, wo die Felder sind durch Kommas getrennt werden:
1,2,"3,3",4
.Versuchen Sie Folgendes:
uniq ist eine sehr einfache Befehl, und nur die Berichte Einzigartigkeit /Duplikate, die nebeneinander.
Könnten Sie eventuell die Verwendung der SQLite-shell importieren Sie Ihre csv-Datei und erstellen Sie Indizes, die zum ausführen der SQL-Befehle schneller.
Hier mein (sehr einfaches) script mit Ruby & Rake Gem.
Erstellen Sie zuerst eine RakeFile und schreiben Sie diesen code:
Dann verwenden Sie es auf die erste Spalte
Und verwenden Sie es auf die Sekunde (zum Beispiel)
Für den zweiten Teil: Lesen Sie die Datei mit dem Text::CSV in eine hash-kodiert, auf Ihre eindeutigen Schlüssel(s), prüfen, ob ein Wert existiert, für den hash, bevor Sie es. So etwas wie dieses:
Daten (muss nicht sortiert sein), in diesem Beispiel brauchen wir die ersten beiden Spalten eindeutig sein:
code:
Die druckt so etwas wie dieses: