Hapus entri duplikat dari file CSV


13

Saya punya file [csv] dengan duplikat datum yang dicetak ulang yaitu data yang sama dicetak dua kali. Saya sudah mencoba menggunakan semacam uniq oleh sort myfile.csv | uniq -unamun tidak ada perubahan dalam myfile.csv, juga saya sudah mencoba sudo sort myfile.csv | uniq -utetapi tidak ada perbedaan.

Jadi saat ini file csv saya terlihat seperti ini

a
a
a
b
b
c
c
c
c
c

Saya ingin terlihat seperti itu

a
b
c

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

menurut man sort, Anda tidak dapat mengurutkan "di tempat".
Archemar

Anda juga dapat mencoba untuk tidak bergantung pada terminal. Anda dapat mencoba alat online ini sebagai ganti textmechanic.com/text-tools/basic-text-tools/…
Aminah Nuraini

Jawaban:


16

Alasan myfile.csvtidak berubah adalah karena -uopsi hanyauniq akan mencetak garis yang unik. Dalam file ini, semua baris adalah duplikat sehingga tidak akan dicetak.

Namun, yang lebih penting, output tidak akan disimpan myfile.csvkarena uniqhanya akan mencetaknya ke stdout(secara default, konsol Anda).

Anda perlu melakukan sesuatu seperti ini:

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

Opsi artinya:

  • -u - hanya menyimpan garis yang unik
  • -o - Output ke file ini bukan stdout

Anda harus melihat man sortinformasi lebih lanjut.


3

Seperti yang ditunjukkan Belmin, sort itu hebat. Jawabannya terbaik untuk data yang tidak disortir, dan mudah diingat dan digunakan.

Namun, ini juga tidak stabil, karena mengubah urutan input. Jika Anda benar-benar harus memiliki data melalui dalam urutan yang sama tetapi menghapus duplikat kemudian, awk mungkin lebih baik.

$ 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

Kasing tepi yang aneh, tetapi muncul dari waktu ke waktu.

Juga, jika data Anda sudah diurutkan ketika Anda menusuknya, Anda bisa menjalankan uniq.

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


$ uniq myfile.csv 
a
b
c

Kelemahan dari kedua saran saya adalah Anda harus menggunakan file sementara dan menyalinnya kembali.


2

uniq -u hanya mencetak garis unik. Masukan Anda tidak memiliki garis unik, jadi uniq -ucetaklah apa-apa. Anda hanya perlu sort:

sort -u myfile.csv

2

Jika Anda ingin mempertahankan urutan file (tidak diurutkan) tetapi masih menghapus duplikat Anda juga dapat melakukan ini

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

Sebagai contoh

d
d
a
a
b
b
c
c
c
c
c

Ini akan menampilkan

d
a
b
c

Bisakah Anda memperluas sintaksisnya?
Sopalajo de Arrierez

Tempatkan string dalam hash. Jika string TIDAK ada di hash maka cetak.
NinjaGaiden
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.