Entfernen Sie doppelte Einträge aus einer CSV-Datei


13

Ich habe eine [csv] -Datei mit doppeltem Datum, dh denselben Daten, die zweimal gedruckt wurden. Ich habe versucht, die Uniq von sort zu verwenden,sort myfile.csv | uniq -u aber es gibt keine Änderung in der myfile.csv, auch ich habe versucht, sudo sort myfile.csv | uniq -uaber keinen Unterschied.

Derzeit sieht meine CSV-Datei also so aus

a
a
a
b
b
c
c
c
c
c

Ich würde gerne so aussehen

a
b
c

sort -u myfile.csv> tmp.csv; mv -f tmp.csv myfile.csv
Archemar

Laut man sortkann man nicht "an Ort und Stelle" sortieren.
Archemar

Sie können auch versuchen, sich nicht auf das Terminal zu verlassen. Sie können dieses Online-Tool stattdessen versuchen textmechanic.com/text-tools/basic-text-tools/…
Aminah Nuraini

Antworten:


16

Der Grund , das myfile.csvnicht zu ändern ist , weil die -uOption für uniqwird nur eindeutige Zeilen drucken. In dieser Datei sind alle Zeilen Duplikate, sodass sie nicht ausgedruckt werden.

Noch wichtiger ist jedoch, dass die Ausgabe nicht gespeichert wird, myfile.csvda uniqsie nur ausgedruckt wird stdout(standardmäßig Ihre Konsole).

Sie müssten so etwas tun:

$ sort -u myfile.csv -o myfile.csv

Die Optionen bedeuten:

  • -u - Halten Sie nur eindeutige Linien
  • -o - Ausgabe in diese Datei anstelle von stdout

Sie sollten man sortfür weitere Informationen anzeigen .


3

Wie Belmin gezeigt hat, ist die Sortierung großartig. Seine Antwort eignet sich am besten für unsortierte Daten und ist leicht zu merken und zu verwenden.

Es ist jedoch auch flüchtig, da es die Reihenfolge der Eingabe ändert. Wenn Sie die Daten unbedingt in derselben Reihenfolge durchlaufen müssen, aber spätere Duplikate entfernen müssen, ist awk möglicherweise besser.

$ cat myfile.csv
c
a
c
b
b
a
c


$ awk '{if (!($0 in x)) {print $0; x[$0]=1} }' myfile.csv
c
a
b

Seltsame Kante Fall, aber es kommt von Zeit zu Zeit.

Wenn Ihre Daten bereits beim Stöbern sortiert sind, können Sie einfach uniq ausführen.

$ cat myfile.csv 
a
a
a
b
b
c
c
c
c
c


$ uniq myfile.csv 
a
b
c

Der Nachteil meiner beiden Vorschläge ist, dass Sie eine temporäre Datei verwenden und diese wieder kopieren müssen.


2

uniq druckt -u nur eindeutige Zeilen. Ihre Eingabe enthält keine eindeutigen Zeilen. uniq -uDrucken Sie also nichts aus. Sie brauchen nur sort:

sort -u myfile.csv

2

Wenn Sie die Reihenfolge der Datei beibehalten möchten (nicht sortiert), aber dennoch Duplikate entfernen möchten, können Sie dies auch tun

awk '!v[$1]++' /tmp/file

Beispielsweise

d
d
a
a
b
b
c
c
c
c
c

Es wird ausgegeben

d
a
b
c

Könnten Sie bitte die Syntax erweitern?
Sopalajo de Arrierez

Legen Sie die Zeichenfolge in einen Hash. Wenn die Zeichenfolge NICHT im Hash vorhanden ist, drucken Sie.
NinjaGaiden
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.