Mam plik [csv] z powielonym duplikatem bazy danych, tj. Te same dane wydrukowane dwukrotnie. Próbowałem użyć sortq uniq
, sort myfile.csv | uniq -u
ale nie ma zmian w myfile.csv
, także próbowałem, sudo sort myfile.csv | uniq -u
ale nie ma różnicy.
Więc obecnie mój plik csv wygląda tak
a
a
a
b
b
c
c
c
c
c
Chciałbym tak wyglądać
a
b
c
text-processing
files
3kstc
źródło
źródło
man sort
, nie można sortować „na miejscu”.Odpowiedzi:
Powodem
myfile.csv
nie zmienia się tak, ponieważ-u
opcjauniq
będzie tylko drukować unikatowych linii. W tym pliku wszystkie wiersze są duplikatami, więc nie zostaną wydrukowane.Co ważniejsze, wyjście nie zostanie zapisane,
myfile.csv
ponieważuniq
po prostu wydrukuje jestdout
(domyślnie na konsoli).Musisz zrobić coś takiego:
$ sort -u myfile.csv -o myfile.csv
Opcje oznaczają:
-u
- zachowuj tylko unikalne linie-o
- wyjście do tego pliku zamiaststdout
Powinieneś zobaczyć,
man sort
aby uzyskać więcej informacji.źródło
Jak pokazał Belmin, sortowanie jest świetne. Jego odpowiedź jest najlepsza w przypadku nieposortowanych danych i jest łatwa do zapamiętania i użycia.
Jest jednak również niestabilny, ponieważ zmienia kolejność danych wejściowych. Jeśli absolutnie potrzebujesz przechodzić dane w tej samej kolejności, ale usuwać późniejsze duplikaty, awk może być lepszy.
Dziwny przypadek na krawędzi, ale pojawia się od czasu do czasu.
Ponadto, jeśli Twoje dane są już posortowane, gdy się na nie zaczepiasz, możesz po prostu uruchomić uniq.
Wadą obu moich sugestii jest to, że musisz użyć pliku tymczasowego i skopiować go z powrotem.
źródło
uniq
-u
drukuje tylko unikalne linie. Twój wkład nie ma unikalnych wierszy, więcuniq -u
nie drukuj niczego. Potrzebujesz tylkosort
:źródło
Jeśli chcesz zachować porządek pliku (nieposortowany), ale nadal usuwać duplikaty, możesz to zrobić
Na przykład
Wyjdzie
źródło