Sort
如何對大文件進行排序?
我有一台配備 Intel(R) Pentium(R) CPU G640 @ 2.80 GHz 和 8 GB RAM 的 PC。我正在使用 EXT3 文件系統在其上執行 Scientific Linux 6.5。
在此設置中,我可以
sort -u
在 200 GB 文件上執行的最快方法是什麼?我應該將文件拆分成更小的文件(小於 8 GB),
sort -u
然後將它們放在一起,然後以不同的大小sort -u
再次拆分它們,等等?或者是否有任何排序腳本、程序可以用我有限的 RAM 處理這麼大的文件?
GNU
sort
(這是大多數 Linux 系統的預設設置)有一個--parallel
選項。來自http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html:‘–並行=n’
將並行執行的排序數設置為 n。預設情況下,n 設置為可用處理器的數量,但限制為 8,因為在那之後性能提升會逐漸減少。另請注意,使用 n 個執行緒會使記憶體使用量增加 log n 倍。另請參閱 nproc 呼叫。
由於您的 cpu 有 2 個核心,您可以執行以下操作:
sort --parallel=2 -uo list-sorted.txt list.txt
最好指定實際的核心數量,因為處理器具有超執行緒可能看起來更多。
您還可以嘗試
nice
影響處理器調度優先級並ionice
影響 I/O 調度。您可以像這樣提高其他程序的優先級,我認為這不會為您節省大量資金,因為它們通常更適合確保後台程序不使用太多資源。無論如何,您可以將它們與以下內容結合使用:nice -n -20 ionice -c2 -n7 sort --parallel=2 -uo list-sorted.txt list.txt
另請注意,正如Gilles評論的那樣,使用單個 GNU 排序命令將比任何其他分解排序的方法更快,因為該算法已經針對處理大文件進行了優化。其他任何事情都可能只會減慢速度。