File teks saya yang besar (hingga 2 GiB) berisi sekitar 100 duplikat tepat dari setiap baris di dalamnya (tidak berguna dalam kasus saya, karena file tersebut adalah tabel data seperti CSV).
Yang saya butuhkan adalah menghapus semua pengulangan sementara (lebih disukai, tetapi ini dapat dikorbankan untuk meningkatkan kinerja yang signifikan) mempertahankan urutan urutan asli. Hasilnya, setiap baris harus unik. Jika ada 100 baris yang sama (biasanya duplikat tersebar di seluruh file dan tidak akan menjadi tetangga) hanya akan ada satu dari jenis yang tersisa.
Saya telah menulis sebuah program di Scala (anggap saja Java jika Anda tidak tahu tentang Scala) untuk mengimplementasikannya. Tapi mungkin ada alat-alat asli C-ditulis lebih cepat dapat melakukan ini lebih cepat?
UPDATE: awk '!seen[$0]++' filename
solusinya tampaknya bekerja dengan baik bagi saya selama file-file itu dekat 2 GiB atau lebih kecil tapi sekarang karena saya harus membersihkan file 8 GiB itu tidak berfungsi lagi. Tampaknya mengambil infinity pada Mac dengan 4 GiB RAM dan 64-bit Windows 7 PC dengan 4 GiB RAM dan 6 GiB swap hanya kehabisan memori. Dan saya tidak merasa antusias untuk mencobanya di Linux dengan RAM 4 GiB mengingat pengalaman ini.
sort -u
mungkin akan lebih cepat.