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

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

Nama palsu
sumber
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
cuonglm
sumber
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
NinjaGaiden
sumber
Bisakah Anda memperluas sintaksisnya?
Sopalajo de Arrierez
Tempatkan string dalam hash. Jika string TIDAK ada di hash maka cetak.
NinjaGaiden