Apa batas skalabilitas yang wajar dari 'sort -u'? (dalam dimensi "panjang garis", "jumlah garis", "ukuran file total"?)
Apa alternatif Unix untuk file yang melebihi ini dalam dimensi "jumlah baris"? (Tentu saja saya dapat dengan mudah mengimplementasikannya, tetapi saya bertanya-tanya apakah ada sesuatu yang dapat dilakukan dengan beberapa perintah Linux standar?)
uniq
sebelumsort -u
membantu. BTW, untuk data ASCIILC_ALL=C sort
mempercepatsort
banyak sekali GNU (lihat jawaban ini )Jawaban:
Yang
sort
Anda temukan di Linux berasal dari paket coreutils dan mengimplementasikan gabungan R-Way Eksternal . Ini membagi data menjadi potongan-potongan yang dapat ditanganinya dalam memori, menyimpannya pada disk dan kemudian menggabungkannya. Potongan dilakukan secara paralel, jika mesin memiliki prosesor untuk itu.Jadi jika ada batasan, itu adalah ruang disk bebas yang
sort
dapat digunakan untuk menyimpan file sementara yang harus digabung, dikombinasikan dengan hasilnya.sumber
sort -o file file
)Saya tidak dapat berbicara untuk implementasi khusus vendor, tetapi
UNIX sort
implementasinya membagi file besar menjadi file yang lebih kecil, mengurutkan file-file ini dan kemudian menggabungkan file yang lebih kecil yang diurutkan menjadi output yang diagregasi.Satu-satunya batasan adalah ruang disk untuk file yang lebih kecil dibuat oleh
sort
, tetapi file dapat diarahkan ke direktori arbitrer dengan mengatur variabel lingkunganTMPDIR
.sumber
man largefile
daftarsort
sebagai sadar file besar.sort
? Atau turunan dari beberapa versi semacam AT&T Unix? Atau versi bersertifikat Unixsort
(seperti GNUsort
di OS / X)?sort
implementasi modern sehubungan dengan karakter multi-byte dapat bervariasi, fakta bahwasort
menggunakan split intermediate files adalah umum untuk semua implementasi UNIX yang didasarkan pada kode asli. BTW: versi Solaris adalah OSS sebagai "OpenSolaris", lihat sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/…Berdasarkan https://blog.mafr.de/2010/05/23/sorting-large-files/ dan /unix//a/88704/9689 :
Memperbarui:
Dari jawaban di atas kita melihat bahwa
sort
sudah melakukan apa yang disebutkan potongan - yaitu Eksternal R-Way merge . Jadi setelah semua berjalan saja:Harus cukup.
Asumsi saya saat ini (tanpa memeriksa kode) tentang batasan adalah:
(Jawaban ini ditandai sebagai komunitas wiki - merasa terdorong untuk memperbaikinya! :))
sumber
sort
menyortir paralel secara default (sejak 2010 setelah halaman yang Anda tautkan),--parallel
ada untuk mengurangi jumlah utas bersamaan daripada membiarkansort
menentukan yang optimal. Sortir sudah melakukan pemisahan dan penggabungan secara internal dengan cara yang lebih efisien. Saya ragu melakukan hal itu akan membantu.