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
3kstc
quelle
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 .

Belmin Fernandez
quelle
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.

Falsche Namen
quelle
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
cuonglm
quelle
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
NinjaGaiden
quelle
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