1. 程式人生 > 其它 >linux 大檔案 排序去重

linux 大檔案 排序去重

有的日誌檔案 動不動就幾十個G

比記憶體都大 ,linux 用 sort 命令 害怕記憶體不足了

這時候 可以 用 -T 選項 ,他會指定一個臨時檔案 ,這樣先把結果 放到臨時檔案裡不會佔記憶體 會跑滿cpu但是記憶體佔用只有0.幾

還有一種方法 是 先用 split 分割命令 ,分割成多個檔案 ,對他們進行排序 ,然後 在 -m 引數 將幾個排序好的檔案進行合併。

然後 對結果 執行 uniq 即可

命令如下

split event1.csv -l 100000 按行數分割檔案

會看到 x** 起始的 分割檔案結果

然後 ls x* | xargs -I {} sh -c "sort '{}' -T /home/ifnk/tmp > '{}.sort'"

遍歷這些分割檔案 ,分別對他們進行排序 ,輸出結果 分別為 x**.sort 結果 檔案

xargs 裡面 {} 這個即為item ,但是他不好做 字串拼接 ,所以我這裡用 sh -c 命令 搭配 單引號 完成 檔名拼接

重點在這的-T設定tmp引數,sort是會寫快取檔案的工具,不會

一次性讀取檔案到記憶體,所以記憶體大小無所謂,但是預設會寫系統區,可能造成系統區空間不夠

所以找個比較大的地方放

接著 執行 "sort -m ls *.sort > result" 將 結果 合併 成一個

sort -m -m 將幾個排序好的檔案進行合併。

然後 執行 uniq result > dudu

即可 dudu 即為最終結果